Переключение страниц и перевод фокуса на потомка новой страницы
Приветствую. Пытаюсь сделать многостраничный интерфейс. На каждой странице есть либо 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
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.Magst du es? In sozialen Netzwerken teilen!
Kommentare
- sdfsdfkp fgskpgokspdog
- 14. Oktober 2024 15:09
C++ - Тест 004. Указатели, Массивы и Циклы
- Ergebnis:90punkte,
- Bewertungspunkte8
- Максим Васильев
- 2. Oktober 2024 04:14
Qt - Тест 001. Сигналы и слоты
- Ergebnis:68punkte,
- Bewertungspunkte-1
- Лев Семенов
- 30. September 2024 11:04
C++ - Тест 001. Первая программа и типы данных
- Ergebnis:53punkte,
- Bewertungspunkte-4
Добрый день.
Большое спасибо. Подтолкнули меня на мысль вынести обработку клавиш из PathView на всю страницу. И тогда - да, ваша подсказка работает. добавил в StackView onCurrentItemChanged: currentItem.focus = true