Переключение страниц и перевод фокуса на потомка новой страницы
Приветствую. Пытаюсь сделать многостраничный интерфейс. На каждой странице есть либо 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 хостинг.Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!
Пікірлер
- Ora Iro
- Жел. 24, 2024, 6:38 Т.Ж.
C++ - Тест 001. Первая программа и типы данных
- Нәтиже:40ұпай,
- Бағалау ұпайлары-8
- Akiv Doros
- Қар. 11, 2024, 2:58 Т.Қ.
C++ - Тест 004. Указатели, Массивы и Циклы
- Нәтиже:50ұпай,
- Бағалау ұпайлары-4
- molni99
- Қаз. 26, 2024, 1:37 Т.Ж.
C++ - Тест 004. Указатели, Массивы и Циклы
- Нәтиже:80ұпай,
- Бағалау ұпайлары4
Добрый день.
Большое спасибо. Подтолкнули меня на мысль вынести обработку клавиш из PathView на всю страницу. И тогда - да, ваша подсказка работает. добавил в StackView onCurrentItemChanged: currentItem.focus = true