R
Aug. 14, 2018, 12:17 p.m.
Переключение страниц и перевод фокуса на потомка новой страницы
Приветствую. Пытаюсь сделать многостраничный интерфейс. На каждой странице есть либо PathView, либо ListView. Управление происходит в них только с клавиатуры (без мыши или тачпада). Многостраничность реализую с помощью StackView. Но столкнулся со следующей проблемой: когда я выполняю push новой страницы из обработчика нажатия клавиатуры в PathView первой страницы StackView, то выводится новая страница, но фокус остается на PathView первой страницы. И соответственно клавиатура продолжает обрабатываться в PathView первой страницы. Подскажите как правильно переводить фокус в данном случае? И в целом правильный ли я выбрал путь реализации многостраничного интерфейса? Код:
main
import QtQuick 2.6 import QtQuick.Window 2.2 import QtQuick.Controls 2.2 Window { visible: true width: 480 height: 320 title: qsTr("Hello World") StackView { id: stackMenu initialItem: "menuMain.qml" focus: true function setPage(name) { stackMenu.push(name); } } }menuMain.qml
import QtQuick 2.6 import QtQuick.Window 2.2 import QtQuick.Controls 2.2 Item { PathView { anchors.fill: parent focus: true model: ListModel { ListElement { color: "lightgreen" title: "Печать" } ListElement { color: "orange" title: "Настройки" } ListElement { color: "orchid" title: "Инфо" } } delegate: Rectangle { id: rect width: 100; height: 100 color: model.color scale: PathView.scale opacity: PathView.opacity z: PathView.z Text { anchors.horizontalCenter: parent.horizontalCenter text: model.title } } path: Path { startX: 240; startY: 200 PathAttribute { name: "z"; value: 10} PathAttribute { name: "scale"; value: 1.5 } PathAttribute { name: "opacity"; value: 1 } PathQuad { x: 240; y: 50; controlX: 0; controlY: 100 } PathAttribute { name: "z"; value: 1} PathAttribute { name: "scale"; value: 0.3 } PathAttribute { name: "opacity"; value: 0.3 } PathQuad { x: 240; y: 200; controlX: 480; controlY: 100 } } Keys.onLeftPressed: { decrementCurrentIndex(); console.log(currentIndex) } Keys.onRightPressed: { incrementCurrentIndex(); console.log(currentIndex); } Keys.onSpacePressed: { console.log(currentIndex); if(currentIndex == 1) stackMenu.setPage("menuSettings.qml"); } } }
Код модуля menuSettings.qml практически идентичен menuMain.qml (отличается только модель, но вряд ли это важно)
2
99
Do you like it? Share on social networks!
- Last comments
- AKApril 1, 2025, 11:41 a.m.Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
- VPMarch 9, 2025, 4:14 p.m.Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
- ИМNov. 22, 2024, 9:51 p.m.Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Now discuss on the forum
- МАApril 1, 2025, 4:21 p.m.0ff763fe-4e50-455d-a3a6-5699c243b1a5_17_44_22_1.xml
- fFeb. 15, 2025, 1:46 p.m.Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
Добрый день.
Большое спасибо. Подтолкнули меня на мысль вынести обработку клавиш из PathView на всю страницу. И тогда - да, ваша подсказка работает. добавил в StackView onCurrentItemChanged: currentItem.focus = true