Каков программный подход в Qt MVC для получения виджетов со структурно отличным представлением об одних и тех же данных? - PullRequest
0 голосов
/ 30 мая 2018

Я только что узнал о концепции модель / представление в Qt и пришел к довольно общему вопросу.

Я понял, как можно использовать модели для привязки определенных типов данных к соответствующим виджетам,Например, QAbstractListModel может связать список с QListView или QComboBox.

. Особое преимущество возникает, когда несколько виджетов связаны с одними и теми же данными через общую модель, такую ​​как QComboBox.и несколько QListView с, общающихся с одним и тем же, QAbstractListModel.

Я заметил, что в демонстрациях из учебника эта ситуация всегда выбирается так, что виджеты отображают данные в той же структуре , например, записи Combo и List в позиции i являются производными от элемента списка i eth, а не от общего содержания данных.

Мой вопрос, как правило,как можно подойти к ситуации, когда одни и те же данные должны отображаться разными виджетами в совершенно разных структурах , то есть записях (и их нуmber) является общей функцией всего набора данных?

Чтобы привести (довольно сложный) пример, скажем, что мои data - это список списков целых чисел,

my_list = [[1,2,3], [2,3,4,5]]

и я хотел бы отобразить его с помощью двух виджетов следующим образом:

QTableView

List      | Length | First Item
----------+--------+-----------
[1,2,3]   | 3      | 1
[2,3,4,5] | 4      | 2


QTreeView

+ [1,2,3]
   + Length
      + 3
   + First item
      + 1
   + Left-truncated Sublists
      + [2,3]
         + Length
            + 2
         + First item
            + 2
         + Left-truncated Sublists
            + [3]
               + This list very nice because it contains no 2
               + Length
                  + 1
               + First item
                  + 3
      + [3]
         + This list very nice because it contains no 2
         + Length
            + 1
         + First item
            + 3
+ [2,3,4,5]
   + Length
      + 4
   + First item
      + 2
   + Left-truncated Sublists
      + [3,4,5]
         + This list very nice because it contains no 2
         + Length
            + 3
         + First item
            + 3
         + Left-truncated Sublists
            + [4,5]
               + This list very nice because it contains no 2
               + Length
                  + 2
               + First item
                  + 4
               + Left-truncated Sublists
                  [5]
                   + This list very nice because it contains no 2
                   + Length
                      + 1
                   + First item
                      + 5
            + [5]
               + This list very nice because it contains no 2
               + Length
                  + 1
               + First item
                  + 5
      + [4,5]
         + This list very nice because it contains no 2
         + Length
            + 2
         + First item
            + 4
         + Left-truncated Sublists
            + [5]
               + This list very nice because it contains no 2
               + Length
                  + 1
               + First item
                  + 5
      + [5]
         + This list very nice because it contains no 2
         + Length
            + 1
         + First item
            + 5
+ there are 2 lists in total

Конечно, я не ожидаю подробного подробного ответа, но некоторые советы или ресурсы были бы хорошими, как подойти к этомуиспользуя MVC в Qt / PyQt.

1 Ответ

0 голосов
/ 01 июня 2018

Вот для чего хорошо подходят модели.Это прокси-модели: они адаптируют исходную модель для определенной организации отображения.Вы обычно получаете от QAbstractProxyModel.Приведен простой пример, например здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...