Переключение страниц и перевод фокуса на потомка новой страницы
Приветствую. Пытаюсь сделать многостраничный интерфейс. На каждой странице есть либо 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 (отличается только модель, но вряд ли это важно)
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.Вам це подобається? Поділіться в соціальних мережах!
- Akiv Doros
- 11 листопада 2024 р. 14:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50бали,
- Рейтинг балів-4
- molni99
- 26 жовтня 2024 р. 01:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80бали,
- Рейтинг балів4
- molni99
- 26 жовтня 2024 р. 01:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20бали,
- Рейтинг балів-10
Добрый день.
Большое спасибо. Подтолкнули меня на мысль вынести обработку клавиш из PathView на всю страницу. И тогда - да, ваша подсказка работает. добавил в StackView onCurrentItemChanged: currentItem.focus = true