Переключение страниц и перевод фокуса на потомка новой страницы
Приветствую. Пытаюсь сделать многостраничный интерфейс. На каждой странице есть либо PathView, либо ListView. Управление происходит в них только с клавиатуры (без мыши или тачпада). Многостраничность реализую с помощью StackView. Но столкнулся со следующей проблемой: когда я выполняю push новой страницы из обработчика нажатия клавиатуры в PathView первой страницы StackView, то выводится новая страница, но фокус остается на PathView первой страницы. И соответственно клавиатура продолжает обрабатываться в PathView первой страницы. Подскажите как правильно переводить фокус в данном случае? И в целом правильный ли я выбрал путь реализации многостраничного интерфейса? Код:
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 (отличается только модель, но вряд ли это важно)

We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.Do you like it? Share on social networks!
- Unknown akadamn
- Jan. 24, 2025, 5:14 p.m.
Qt - Test 001. Signals and slots
- Result:84points,
- Rating points4
- Unknown akadamn
- Jan. 24, 2025, 4:22 p.m.
Qt - Test 001. Signals and slots
- Result:42points,
- Rating points-8


Добрый день.
Большое спасибо. Подтолкнули меня на мысль вынести обработку клавиш из PathView на всю страницу. И тогда - да, ваша подсказка работает. добавил в StackView onCurrentItemChanged: currentItem.focus = true