A
Artisan13. Mai 2020 03:03

TabBar QML. Сохранение изменений при переключении между контентом (вкладками, .qml-файлами).

QML, TabBar

Всем добрый день. Для заполнения TabBar использую компонент loader, а в качестве содержимого .qml-файлы. Путь задаю через параметр source. Во время работы во вкладках начальный контент (загружаемый из .qml-файлов) изменяется (например выбирается один из RadioButton или устанавливается положение Slider), но при переходе в другую вкладку и последующем возврате в предыдущую, контент обновляется до первоначального состояния, что логично, т.к. перед использованием в TabBar qml-файла контента, он был скомпилирован посредством source.
Каким образом можно поддерживать во время работы программы (при переключении в TabBar межу разными вкладками .qml-файлами) текущие состояния компонентов (во всех вкладках), а не возвращаться к первоначальным состояниям.

P.S. Речь идёт именно о поддержании (сохранении) состояний quick компонентов. Если же quick компонент имеет наполнение из C++ части кода посредством Q_PROPERTY проблем нет. Не хотелось бы отводить в С++ "медиаторе" ненужные поля только под сохранение состояний каждого визуального компонента, перекидываясь сигналами-слотами.

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

Magst du es? In sozialen Netzwerken teilen!

4
Evgenii Legotckoi
  • 13. Mai 2020 03:59
  • (bearbeitet)
  • Die Antwort wurde als Lösung markiert.

Добрый день.

Попробуйте использовать Settings QML Type

Думаю, что можно добавить в каждый таб систему настроек и сохранять текущее состояние, а при перезапуске таба восстанавливать из настроек в обработчике Component.onCompleted

    A
    • 13. Mai 2020 11:11

    Подход помог, спасибо!
    При переходе из вкладки в вкладку, объект из qml-файла уничтожается, мы сохранили параметры, а возврат к вкладке аналогичен новому «запуску» с сохранёнными параметрами.
    А есть ли способ подсовывания контента (qml-файла) помимо loader чтобы не происходил постоянный процесс создания, уничтожения объекта (по сути, аналог закрытия открытия программы), а контент неактивной вкладки продолжал своё существование (т.е время жизни равнялось времени жизни работы всего приложения)?
    (к примеру, таймер запущенный только в qml- файле контента продолжал свой счёт даже когда вкладка не открыта, конечно таймер на стороне С++ сделает это же и передаст своё значение в момент открытия вкладки, но возможен визуальный процесс логика которого описана только в qml и переносить в С++ лишнее.) Можно отказаться от раздельных qml-файлов и реализовать всё в одном qml-файле отвечающем за всё приложение и описывающее все вкладки TabBar, тогда все элементы будут иметь время жизни работы программы в целом, но уж очень громоздкое и не красивое решение.
    Еще раз спасибо за решение с Settings QML Type и Component.onCompleted!

      Evgenii Legotckoi
      • 13. Mai 2020 15:21

      Ну а чем вам не угодило решение, которое описано в документации на TabBar с использованием StackView?
      Там не используется Loader и все страницы просто загружаются при запуске программы. Как понимаю, они будут работатеть на протяжении всего жизненного цикла, если только принудительно не будут удалться или добавляться.

      TabBar {
          id: bar
          width: parent.width
          TabButton {
              text: qsTr("Home")
          }
          TabButton {
              text: qsTr("Discover")
          }
          TabButton {
              text: qsTr("Activity")
          }
      }
      
      StackLayout {
          width: parent.width
          currentIndex: bar.currentIndex
          Item {
              id: homeTab
          }
          Item {
              id: discoverTab
          }
          Item {
              id: activityTab
          }
      }
      
        A
        • 14. Mai 2020 01:23

        Даже и не подумал о StackView, а это именно моё решение, а не loader что ошибочно применял. Спасибо еще раз, теперь всё работает как надо!

          Kommentare

          Nur autorisierte Benutzer können Kommentare posten.
          Bitte Anmelden oder Registrieren
          Letzte Kommentare
          ИМ
          Игорь Максимов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> в заголовочном файле не работает валидатор.
          EVA
          EVA25. Dezember 2023 10:30
          Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
          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