python - Qt 的 MVC 中的编程方法是什么,可以在相同数据上获取具有结构不同视图的小部件?
问题描述
我刚刚了解了 Qt 中的模型/视图概念,并提出了一个相当普遍的问题。
我了解如何使用模型将某些数据类型关联到适当的小部件,例如QAbstractListModel
可以将列表关联到 aQListView
或 a QComboBox
。
当多个小部件通过一个通用模型关联到相同的数据时,就会产生特殊的好处,例如 aQComboBox
和几个QListView
s 与同一个单一的QAbstractListModel
.
我注意到,在教科书演示中,总是选择这种情况,以便小部件以相同的结构显示数据,例如 Combo 的条目和位置的 Listi
都来自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
/中的 MVC 来解决这个问题PyQt
。
解决方案
这就是视图模型非常适合的地方。它们是代理模型:它们使源模型适应某种显示组织。您通常会从QAbstractProxyModel
. 例如这里提供了一个简单的示例。
推荐阅读
- javascript - 如何更新 id 的反应 redux 状态对象 - 键值对
- c - 为什么 C“long”数据类型编译为两个 MSP430“.word”?
- security - 通过 Jenkins Pipeline 使用 ssh 密钥从 Vault 到 ssh
- javascript - 在调度 thunk 动作时,状态会更新,但调用调度的函数中的相关状态仍然是旧的
- plsql - PLSQL SUBSTR 函数忽略尾随零
- oracle - ORA-01031: 权限不足 - 创建表?
- html - 如何让 SASS 变量在 Ionic 项目中工作?
- properties - gcloud 部署管理器未定义属性:未定义错误:“属性”未定义
- r - R/ggiraph:情节被截断
- loops - 如何让程序每 5 分钟重新启动一次?