На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: archimed7592
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> QTreeWidget
    я хочу в данном компаненте отображать иерархические данные.
    Обновление данных происходит каждую секунду. Сами данные представляют 2 уровня - вершины и элементы вершин.

    Вся проблемма в том, что данные постоянно изменяются (удаляются, добавляются). Причем как вершины так и элементы.

    Я перед отображением новых данных подчищаю старые и отрисовываю заново.
    Удаление и добавление впринципе проходит нормально. Но вот если я раскрыл какой-то узел и данные
    отрисовались заново, то этот узел закрывается.

    Ослеживать открытые вершины и открывать их для новых данных не очень бы хотелось.
    Можно ли как еще решить решить данную проблемму. Например используя модели,...
      zss, тебя спасет только TTreeView + своя собственная модель данных. Это, на самом деле, не так сложно.
      На стандартных же виджетах ты это не реализуешь - все будет моргать.
        Flex Ferrum, а что даст модель ?
          Цитата zss @
          Flex Ferrum, а что даст модель ?

          Более гибкий контроль над данными. Я буквально с полмесяца назад решал подобную задачу. И также с достаточно частым обновлением.
          Тут фишка в том, что модель может хранить данные в своем представлении и удобным для нее способом реагировать на изменение исходных данных. Ну и информировать виды о том, что (и каким образом) данные изменились.

          Добавлено
          Т. е. грубо говоря, модель на очередной итерации сверяет отображенные в настоящий момент данные с новым состоянием исходных. Определяет - какие элементы изменились, какие добавились, какие были удалены. И в соответствии с этим меняет состояние отображаемых данных и информирует об этом виды. Достаточно удобно и без лишнего гемора.
            Цитата Flex Ferrum @
            Т. е. грубо говоря, модель на очередной итерации сверяет отображенные в настоящий момент данные с новым состоянием исходных. Определяет - какие элементы изменились, какие добавились, какие были удалены. И в соответствии с этим меняет состояние отображаемых данных и информирует об этом виды. Достаточно удобно и без лишнего гемора

            ну тоесть уже существуют стандартные модели или нужно создавать свою для своих данных ?
              Цитата zss @
              ну тоесть уже существуют стандартные модели или нужно создавать свою для своих данных ?

              В данном случае лучше создать свою. Но! Естественно, ты будешь наследовать ее от QAbstractItemModel. Дело в том, что сложного там ничего нет. Главное - грамотно перегрузить функции. А документация подробно расскажет - как это лучше делать.
                Flex Ferrum, а можно ли связывать модели. Тоесть я хочу не создавать иерархию на основе дерева,
                а разбить уровни на два списка. Тоесть в одном 1 уровень, во 2 - второй.

                Я хочу при выборе первого уровня, чтоб отображались для него данные во 2. Но сами данные как бы едины для обоих списков.
                  Цитата zss @
                  Flex Ferrum, а можно ли связывать модели. Тоесть я хочу не создавать иерархию на основе дерева,
                  а разбить уровни на два списка. Тоесть в одном 1 уровень, во 2 - второй.

                  Да связать то, я думаю, можно. Но вот что будет в режиме быстрого обновления...
                    Цитата Flex Ferrum @
                    Да связать то, я думаю, можно. Но вот что будет в режиме быстрого обновления...

                    еу например просто посылать сигналы от одного списка к другому при поступлении новых данных
                      Я попытался создать модель, но что-то запутался

                      Я хочу в одном из столбце вместо цифр использовать ProgressBar.

                      Для этого мене нужно использовать связку QListView/QAbstarctItemModel или QListWidget/QAbstarctListModel
                        Цитата zss @
                        Для этого мене нужно использовать связку QListView/QAbstarctItemModel или QListWidget/QAbstarctListModel

                        Нет. Для этого тебе нужно использовать QItemDelegate.

                        Добавлено
                        Билн, были бы исходники моими - пример бы показал. А так... Незя... :(
                          Цитата Flex Ferrum @
                          Нет. Для этого тебе нужно использовать QItemDelegate.

                          На сколько я понял для загрузки данных нужно использовать QTreeView/QAbstractListModel

                          А вод для более тонкого управления (например для вставки в ячейку Qlabel) нужно использовать QItemDelegate
                          Сообщение отредактировано: zss -
                            Flex Ferrum, создал я модель на основе QAbstractListModel.
                            Перекрыл 4 метода. Но что-то не пойму:

                            1. Как в методе headerData задать размер колонок
                            2. При выборе строки происходит ее выделение. Но после обновления данных выделение снимается. Как можно это победить ?
                            3. В методе data() возвращается QVariant. А как можно вставить картинку ?


                            Цитата Flex Ferrum @
                            Нет. Для этого тебе нужно использовать QItemDelegate.

                            На сколько я понял делегат для редактирования нужен. Как на его основе засунуть стандартный компанент и изменять его значение.
                              Блин.... как же настроить эти списки друг на друга :angry: >:(
                                Цитата zss @
                                2. При выборе строки происходит ее выделение. Но после обновления данных выделение снимается. Как можно это победить ?

                                Цитата zss @

                                Ослеживать открытые вершины и открывать их для новых данных не очень бы хотелось.
                                А почему? Я успешно реализовывал это решение. Накладных расходов требует не очень много, по одному сравнению идентификаторов на каждый отрисовываемый элемент. И своих моделей создавать не надо.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0409 ]   [ 16 queries used ]   [ Generated: 14.09.24, 21:57 GMT ]