R
Ruslan-maniak14. August 2018 02:17

Переключение страниц и перевод фокуса на потомка новой страницы

QML

Приветствую. Пытаюсь сделать многостраничный интерфейс. На каждой странице есть либо 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 (отличается только модель, но вряд ли это важно)

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

2
Evgenii Legotckoi
  • 14. August 2018 02:35

Добрый день.

У stackview есть свойство currentItem, если память не изменяет.
То поэтому можно так написать
currentItem.focus = true. После того как пушнули страничку. Тогда фокус должен правильно установиться.
В принципе путь с использованием StackView вполне нормальный, особенно, если реализовывать вложенный стек страниц.




    R
    • 14. August 2018 03:02

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

    И теперь работает как надо.


      Kommentare

      Nur autorisierte Benutzer können Kommentare posten.
      Bitte Anmelden oder Registrieren
      Letzte Kommentare
      A
      ALO1ZE19. Oktober 2024 08:19
      Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
      ИМ
      Игорь Максимов5. Oktober 2024 07:51
      Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
      d
      dblas55. Juli 2024 11:02
      QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
      k
      kmssr8. Februar 2024 18:43
      Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
      Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
      Jetzt im Forum diskutieren
      J
      JacobFib17. Oktober 2024 03:27
      добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
      JW
      Jhon Wick1. Oktober 2024 15:52
      Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
      КГ
      Кирилл Гусарев27. September 2024 09:09
      Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
      F
      Fynjy22. Juli 2024 04:15
      при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

      Folgen Sie uns in sozialen Netzwerken