Реклама

[QML] Постоянно перерисовывается интерфейс в ListModel Проект Navigation Drawer

QtQuick, C++, Qt, QML

Всем привет :)

За основу проекта я повзаимствовал код отсюда: Navigation Drawer

На первом фрагменте у меня 2 кнопки: Подключиться к порту (активна) и Отключиться от порта (неактивна), и сам comboBox, где собственно и хранятся порты. Естественно код связан с С++ кодом ибо я гоняю байты по модбас протоколу.
На втором фрагменте у меня dial (крутилка такая) и 9 кнопок

В чем суть: когда программа подключается к порту успешно, то кнопка “Подключиться” стаёт неактивна, а кнопка “Отключиться” соответственно активна и в comboBox’е выводиться текущий текст порта.

Но когда я переключусь с первого фрагмента на другой и потом обратно на первый, то я увижу что кнопки и comboBox перерисовались в дефолтные свои интерфейсы. То-есть кнопка “Подключиться” снова активна, кнопка “Отключиться” снова неактивна, и comboBox снова пустой. И если я попробую пересканировать порты, то comboBox ничего не покажет, кнопка “Подключиться” не отреагирует никак

Вопрос: как сделать так чтобы при переключении с фрагмента на фрагмент – элементы интерфейса не перерисовывались обратно. А были такими какими остались.

Буду очень благодарен!

  • #
  • 2 декабря 2016 г. 12:13

День добрый.

В данном случае получается, что при каждой загрузке фрагмент подгружается неинициализированным.

Вам нужно возможность сохранения настроек для фрагмента, которые Вы сможете подгружать, когда фрагмент будет добавлен. То есть при первом сканировании порта, сохраните данные в переменные, например, в переменную типа bool, которая будет говорить, что сканирование прошло успешно.

А в фрагменте можно добавить функцию init, которая будет дёргать настройку и эти данные.

Я могу ошибаться, но можно в конце фрагмента добавить такую конструкцию

Здравствуйте Евгений. Спасибо за ответ.
А разве в ListModel нету такой, дескать, опции, которая решает мои все проблемы с этими фрагментами?

В ListModel есть такое свойство как: dynamicRoles, разве оно не сможет помочь?

//Модель данных для списка с пунктами меню
    ListModel {
        id: navModel
 
        dynamicRoles: true
 
        ListElement {fragment: "Подключение к порту"}
        ListElement {fragment: "Настройка МКП"}
        ListElement {fragment: "Регулировка МКП"}
        ListElement {fragment: "Управление и токи"}
        ListElement {fragment: "О программе"}
    }

Это Ваш код. И там я включил это свойство, но после компиляции я вижу такую вот бяку:

QML ListModel: unable to enable dynamic roles as this model is not empty!

Я как бы понимаю, что не пустой, но как он может быть пустым, если там пункты меню?

  • razorqhex
  • #
  • Ответ был помечен как решение
  • 4 декабря 2016 г. 9:34

Вы путаете менюшку, которая находится в Navigation Drawer и содержимое, которое загружается в сам Loader. Это совершенно разные вещи. Эта ListModel – всего лишь список названий фрагментов. А dynamicRoles на это не влияет. Вы не в том месте пытаетесь решить проблему.

Вот здесь загружаются файлы. И их состояние нужно инициализировать, если есть какое-то уже готовое состояние. А ListModel не обязана хранить состояние фрагментов, которые загружаются в Loader.

Loader {
        id: loader
        anchors.top: menuRect.bottom
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.bottom: parent.bottom
        source: "Fragment1.qml"
 
        // Функция для смены содержимого Loader
        function loadFragment(index){
 
            switch(index){
            case 0:
                loader.source = "Fragment1.qml"
                break;
            case 1:
                loader.source = "Fragment2.qml"
                break;
            case 2:
                loader.source = "Fragment3.qml"
                break;
            default:
                loader.source = "Fragment1.qml"
                break;
            }
        }
    }

 

Реклама

Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
  • Cheessy
  • 23 января 2018 г. 16:39

C++ - Тест 006. Перечисления

  • Результат 80 баллов
  • Очки рейтинга 4
  • Cheessy
  • 23 января 2018 г. 15:52

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

  • Результат 71 баллов
  • Очки рейтинга 1
  • Cheessy
  • 23 января 2018 г. 15:28

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

  • Результат 66 баллов
  • Очки рейтинга -1
Последние комментарии
  • EVILEG
  • 22 января 2018 г. 8:56

QML - Урок 004. Сигналы и слоты в Qt QML

Так и будет передаваться. Это аргумент сигнала. void sendToQml(int count); Видите сигнатуру? аргумент называется count . Вот он и передаётся. А описывать в Q_PROP...

  • xintrea
  • 22 января 2018 г. 8:43

QML - Урок 004. Сигналы и слоты в Qt QML

Не понял, как будет передаваться значение count в QML, если нигде он не описан через Q_PROPERTY

  • EVILEG
  • 21 января 2018 г. 20:42

Qt/C++ - Урок 029. Изображение в базе данных в Qt – Сохранение и Восстановление

Добрый день! Подготовьте изображение к вставке в базу данных через bind, как сделано в методе insertIntoTable, в данном примере. Больше похоже на то, что вылетает неожидан...

  • Mark
  • 21 января 2018 г. 19:32

Qt/C++ - Урок 029. Изображение в базе данных в Qt – Сохранение и Восстановление

Перед этим приложение работало отлично, ошибка связана именно с добавлением данного поля

  • Mark
  • 21 января 2018 г. 19:31

Qt/C++ - Урок 029. Изображение в базе данных в Qt – Сохранение и Восстановление

также вот вывод  текста самого запроса "Insert into commands_one (name, seq, pic) values ('bnbvn','\n1. bvnb\n2. bvnb', �PNG\r\n\u001A\n );"

Сейчас обсуждают на форуме
  • EVILEG
  • 23 января 2018 г. 11:19

Как в QML наиболее правильно сделать ~50 копий изображения?

Добрый день! Вообще самое эффективное, чего я добивался в рамках QML - это отрисовка в рукопашную через OpenGL - это касается скорости отрисовки. Когда создаёте несколько изо...

256 строк в модели данных

Извиняюсь, нашел ответ тут http://www.qtcentre.org/threads/54533-QSqlQueryModel-%E2%80%98s-method-rowcount()-return-256 if(this->canFetchMore()){ this->fetchMore(); }...

  • EVILEG
  • 18 января 2018 г. 20:46

Как проверить доступность сервера

Тут скорее всего ситуативно, но по факту да, в большинстве задач можно обойтись и одним network менеджером

  • EVILEG
  • 18 января 2018 г. 20:46

QGraphicsScene

Как вариант умножать ключевые координаты, от которых вы строите весь панораму, на общую ширину панорамы и при прокрутке отталкиваться от этих кратных координат.

  • Ruslan
  • 18 января 2018 г. 11:51

Исключения. Потоки.

Все оказалось проще. Документацию то читал, но забыл нюансы. Не указывал в connect  тип подключения Qt::DirectConnection