Реклама

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

QML, QtQuick, Qt, C++

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

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

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

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

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

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

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

  • #
  • 2 декабря 2016 г. 18: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 г. 15: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;
            }
        }
    }

 

Реклама

Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
Последние комментарии
  • EVILEG
  • 24 апреля 2017 г. 20:44
Подключение вашего Qt приложения к сервисам Google, используя OAuth 2.0

У меня пока мыслей на этот счёт нет ((

Подключение вашего Qt приложения к сервисам Google, используя OAuth 2.0

Пробовал играться с шарком, либо я криво смотрел, либо почему-то POST запросы на oauth.yandex.ru не летят, хотя должны постом лететь, я и исходники QOAuth2AuthorizationCodeFlow ковырял на пред

  • EVILEG
  • 24 апреля 2017 г. 13:39
Подключение вашего Qt приложения к сервисам Google, используя OAuth 2.0

Возможно, стоит Wireshark`ом запросы посмотреть. В чём отличие идёт аякс запроса от запроса из библиотеки. Возможно, что не хватает какой-нибудь заголовочной информации.

Сейчас обсуждают на форуме
Signal из Dialog

Добрый вечер.Вроде бы разобрался как работают signal и slot, но возник такой вопрос.Есть Widget из которого открывается Dialog, в Dialog-е есть кнопка, savebutton, по которой происходит вс...

  • EVILEG
  • 26 апреля 2017 г. 20:53
Область

Да. Это возможно. Определитесь только с задачей, которую эта область должна выполнять. А то получается, что нужно создать что-то, в чём нужно делать что-то. Какой-то абстрактный конь в вакууме...

  • Arrow
  • 26 апреля 2017 г. 20:10
Дополнительное окошко

Если кто-то собрался такое разрабатывать, то думаю лучше идти к тем, кто за это хорошо заплатит. Самому писать в одиночку в надежде продать не вариант. :)

  • EVILEG
  • 26 апреля 2017 г. 19:20
Сохранение PDF файла в БД

Да. Это весьма удобно, что к базе данных может обращаться.

  • EVILEG
  • 26 апреля 2017 г. 19:11
Qt Installer Framework и Redistributable пакеты.

Смотрю, всё обошлось даже весьма малой кровью. Замечательно.