Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Qt'中的编程方法是什么;s MVC在同一数据上获得具有不同结构视图的小部件?_Python_Qt_Model View Controller_Pyqt - Fatal编程技术网

Python Qt'中的编程方法是什么;s MVC在同一数据上获得具有不同结构视图的小部件?

Python Qt'中的编程方法是什么;s MVC在同一数据上获得具有不同结构视图的小部件?,python,qt,model-view-controller,pyqt,Python,Qt,Model View Controller,Pyqt,我刚刚了解了Qt中的模型/视图概念,并得出了一个相当普遍的问题 我了解如何使用模型将某些数据类型关联到适当的小部件,例如QAbstractListModel可以将列表关联到QListView或QComboBox 当多个小部件通过一个公共模型关联到同一数据时,会产生特殊的好处,例如一个QComboBox和几个QListView与同一个QAbstractListModel通信 我注意到,在教科书演示中,选择这种情况时,小部件总是以相同的结构显示数据,例如组合项和位于I位置的列表都来自Ieth列表项,

我刚刚了解了Qt中的模型/视图概念,并得出了一个相当普遍的问题

我了解如何使用模型将某些数据类型关联到适当的小部件,例如
QAbstractListModel
可以将列表关联到
QListView
QComboBox

当多个小部件通过一个公共模型关联到同一数据时,会产生特殊的好处,例如一个
QComboBox
和几个
QListView
与同一个
QAbstractListModel
通信

我注意到,在教科书演示中,选择这种情况时,小部件总是以相同的结构显示数据,例如组合项和位于
I
位置的列表都来自
I
eth列表项,而不是来自数据的总内容

我的问题是,一般来说,如何处理相同的数据将由不同的小部件以完全不同的结构显示的情况,即条目(及其编号)是整个数据集的通用函数

举一个(相当复杂)的例子,假设我的数据是一个整数列表

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

当然,我不希望得到一个完全编码的详细答案,但是一些提示或资源会很好,如何在
Qt
/
PyQt
中使用MVC来实现这一点,这就是viewmodels非常适合的。它们是代理模型:它们使源模型适应特定的显示组织。您通常会从
QAbstractProxyModel
派生。提供了一个简单的示例,例如..

您可以详细解释QTreeView中显示的结构。您想要以下内容吗@eyllanesc不完全是这样,每个
+
都引用一个节点,缩进给出了层次结构。但是,请注意,我的问题不是关于这个特定问题的实施细节。我想问的是,两个小部件如何从同一个数据模型中派生出两种结构不同的表示。实际上,模型就是数据本身,但元素之间的关系,例如:
my_list=[[1,2,3],[2,3,4,5]
,不是一个模型,因为它不存在关系。如果您想了解Qt中模型结构的更多细节,我建议您阅读。每种类型的视图都需要一种类型的模型,因此,请查找与其定义的模型或结构相关的其他项