A
13 мая 2020 г. 3: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
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
4

Добрый день.

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

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

A

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

Ну а чем вам не угодило решение, которое описано в документации на 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

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

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Как стать автором?

Внесите вклад в развитие сообщества EVILEG.

Узнайте, как стать автором сайта.

Изучить
Donate

Добрый день, Дорогие Пользователи !!!

Я Евгений Легоцкой, разработчик EVILEG. И это мой хобби-проект, который помогает учиться программированию другим программистам и разработчикам

Если сайт помог вам, и вы хотите также поддержать развитие сайта, то вы можете сделать пожертвование следующими способами

PayPalYandex.Money
Timeweb

Позвольте мне порекомендовать вам отличный хостинг, на котором расположен EVILEG.

В течение многих лет Timeweb доказывает свою стабильность.

Для проектов на Django рекомендую VDS хостинг

Посмотреть Хостинг Timeweb
s
3 июня 2020 г. 2:56
silo1995

C++ - Тест 003. Условия и циклы

  • Результат:35баллов,
  • Очки рейтинга-10
АП
2 июня 2020 г. 22:11
Алексей Пикенин

C++ - Тест 005. Структуры и Классы

  • Результат:75баллов,
  • Очки рейтинга2
2 июня 2020 г. 14:04
Даниил Чижевский

C++ - Тест 001. Первая программа и типы данных

  • Результат:86баллов,
  • Очки рейтинга6
Последние комментарии
4 июня 2020 г. 12:10
IscanderChe

Qt/C++ - Урок 091. Как написать кастомный делегат управляющий подсветкой строки в таблице

Полностью скопировал пример - всё правильно работает. Значит, где-то у меня ошибки в тестовом проекте. Буду разбираться. Извините за беспокойство. :)
4 июня 2020 г. 8:08
Евгений Легоцкой

Qt/C++ - Урок 091. Как написать кастомный делегат управляющий подсветкой строки в таблице

Во все колонки установили? Нужно на все колонки устанавливать.
4 июня 2020 г. 7:59
IscanderChe

Qt/C++ - Урок 091. Как написать кастомный делегат управляющий подсветкой строки в таблице

Код делегата полностью скопировал в свой тестовый проект, но окрашивается не вся строка целиком, а только ячейка, на которую указывает курсор.
4 июня 2020 г. 7:12
Евгений Легоцкой

Qt/C++ - Урок 091. Как написать кастомный делегат управляющий подсветкой строки в таблице

Добрый день. Удобства ради. В больших проектах удобнее вызывать BaseClass, чем постоянно смотреть, от чего конкретно наследован текущий класс. Экономит время.
Сейчас обсуждают на форуме
МА
f
3 июня 2020 г. 2:49
fryn3

Можно ли сделать в QML таблицу как в Excel?

edi-tableview - нашел пока такое выглядит коряво, посмотрим что можно сделать
2 июня 2020 г. 3:46
Евгений Легоцкой

Медиа файлы Google Firebase

Картинки можете попробовать сжимать через QPixmap, там есть возможность установки scaleFactor, через него можете устанавливать нужные параметры. А что касается конвертации видео, то лучше п…
2 июня 2020 г. 3:01
Евгений Легоцкой

Перехват обращения к локальным файлам QWebEngineView

В вашем случае вполне адекватное решение. Так сказать меньше зло. В противном случае пришлось бы очень много переписывать и перепиливать.
a
1 июня 2020 г. 11:26
alekseyttrv

SSL на Android

у меня стоит версия Qt 5.14.2. В настройках android поставил openssl из коробки, и этот прроект автоматически стянулся. Достаточно было только добавить в .pro-файл строку после этого и все …
О нас
Услуги
© EVILEG 2015-2020
Рекомендует хостинг TIMEWEB