ДЧ
Дмитрий ЧерноволЖел. 2, 2016, 6:54 Т.Ж.

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

QtQuick, C++, Qt, QML

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

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

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

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

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

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

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

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

3
Evgenii Legotckoi
  • Жел. 2, 2016, 7: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!

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

      Evgenii Legotckoi
      • Жел. 4, 2016, 4: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;
                  }
              }
          }

       

        Пікірлер

        Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
        Кіріңіз немесе Тіркеліңіз
        OI
        • Ora Iro
        • Жел. 24, 2024, 6:38 Т.Ж.

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

        • Нәтиже:40ұпай,
        • Бағалау ұпайлары-8
        AD

        C++ - Тест 004. Указатели, Массивы и Циклы

        • Нәтиже:50ұпай,
        • Бағалау ұпайлары-4
        m
        • molni99
        • Қаз. 26, 2024, 1:37 Т.Ж.

        C++ - Тест 004. Указатели, Массивы и Циклы

        • Нәтиже:80ұпай,
        • Бағалау ұпайлары4
        Соңғы пікірлер
        ИМ
        Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
        Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
        Evgenii Legotckoi
        Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
        Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
        A
        ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
        Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
        ИМ
        Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
        Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
        d
        dblas5Шілде 5, 2024, 11:02 Т.Ж.
        QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
        Енді форумда талқылаңыз
        Evgenii Legotckoi
        Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
        добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
        t
        tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
        google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
        NSProject
        NSProjectМаусым 4, 2022, 3:49 Т.Ж.
        Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
        9
        9AnonimҚаз. 25, 2024, 9:10 Т.Ж.
        Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

        Бізді әлеуметтік желілерде бақылаңыз