我正在使用 PyQt4 ,并创建了一个基于QAbstractItemModel
的分层模型,它自然形成了一个严格的层次结构:
- Study
- Recording
- Config
study
项是模型的根项,然后QTreeView
显示其下的记录项列表,以及它们的嵌套配置项。
我希望在QTreeView
中选择其他窗口小部件时显示和编辑有关各个配置项的额外元信息。根据配置项的类型,要显示的元字段数会有所不同,因此我尝试在QTableView
中显示它们。
QDataWidgetMapper
类似乎有助于此类功能,但我无法找到一次显示多个字段的小部件的任何示例(即除了行编辑,组合框,复选框,等等。)。代理模型似乎又是另一种潜在的路径,但我不确定如何通过这种方式根据选择显示模型的子集。
任何人都建议我如何使用模型/视图框架实现我的目标?
答案 0 :(得分:1)
我最终想出了一个使用多种代理模型的解决方案。
我在模型中添加了其他列,过滤掉前三个包含信息,以便使用QTreeView
的子类在QSortFilterProxyModel
中显示。
然后将选择模型链接到为每个模型项设置“选定”属性的方法。一个代理模型inspired by this blog post首先将树展平为具有相同顺序的表格模型。然后,另一个代理模型根据选择属性过滤行,并从上面提到的扩展集中过滤非空列的另一个过滤器。
这会产生一个包含所需元信息的单行*表。要将其显示为列,从QAbstractProxyModel
派生的附加代理模型用于通过将行映射到列来转置表,反之亦然。
*这是一行,因为在给定时间内只允许选择一个项目。