DCh
Dec. 2, 2016, 5:54 p.m.

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

QtQuick, C++, Qt, QML

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

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

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

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

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

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

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

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
3

День добрый.

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

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

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

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

DCh

Здравствуйте Евгений. Спасибо за ответ.
А разве в 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!

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

Вы путаете менюшку, которая находится в 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;
            }
        }
    }

 

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Donate

Hello, Dear Users of EVILEG!!!

If the site helped you, then support the development of the site financially, please.

You can do it by following ways:

Thank you, Evgenii Legotckoi

DN
Jan. 28, 2020, 8:01 a.m.
Denis Nikolaev

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

  • Result:14points,
  • Rating points-10
SF
Jan. 27, 2020, 4:10 p.m.
Sergei Filin

C++ - Test 001. The first program and data types

  • Result:73points,
  • Rating points1
BM
Jan. 26, 2020, 12:16 a.m.
Bekzod Muminov

C++ - Test 001. The first program and data types

  • Result:53points,
  • Rating points-4
Last comments
m
Jan. 27, 2020, 8:53 p.m.
michaeldevp

Единственная проблема состоит в том, что для выделения QCheckBox приходится дважны нажимать мышь. Получается что сначала выделяется ячейка. а только потом фокус уже попадает на виджет. …
Jan. 27, 2020, 12:01 p.m.
Ruslan Polupan

Да так, посмотрел библиотеку попробовал примеры...
s
Jan. 27, 2020, 1:51 a.m.
shame

Чего не webassembly?
Jan. 22, 2020, 1:12 a.m.
Docent

Полезная статья. Как всегда - то что надо. Добавлю ещё маленькую полезность - после установки tracer (88 строка) и перед выводом значений в lineEdit (91 строка) стоит добавить updatePositio…
Jan. 17, 2020, 1:31 p.m.
Andrej Jankovich

Выглядит как ошибка библиотеки. Расскажите подробно на какой платформе вы собираете проект (MinGW или MSVC) их версии и версии Qt.
Now discuss on the forum
f
Jan. 29, 2020, 11:27 a.m.
fen3der

Добрый день Сломал уже всю голову, никак не могу разобраться с печатью Проблема в следующем: если программа открыта не на весь экран, то документ распечатанный выглядит так …
s
Jan. 29, 2020, 11 a.m.
shuric

Доброго времени суток. Пытаюсь разобраться с QMdiArea. При создании subWindow все понятно, но не могу понять почему при закрытии subWindow не освобождается память. Вот простой при…
Jan. 28, 2020, 1:56 p.m.
Pavel.K

разобрался
Jan. 27, 2020, 2:17 p.m.
Il'ja Chichak

а почему бы не сделать одну модель, например Attachement со всеми этими полями, и в зависимости от действия пользователя, например, "добавить документ", "добавить картинку" и т.д. класть все это…
E
Jan. 26, 2020, 10:42 p.m.
Edi

Другого способа, как получать перезагруженный контент через JavaScript на странице, я не знаю. Получилось сделать без QWebEngineView, с помощью QWebEnginePage, runJavaScrip…
EVILEG
About
Services
© EVILEG 2015-2019
Recommend hosting TIMEWEB