在QTableView中显示分层模型项的详细信息

时间:2012-12-13 04:58:21

标签: python qt model-view-controller qt4 pyqt

我正在使用 PyQt4 ,并创建了一个基于QAbstractItemModel的分层模型,它自然形成了一个严格的层次结构:

 - Study
  - Recording
   - Config

study项是模型的根项,然后QTreeView显示其下的记录项列表,以及它们的嵌套配置项。

我希望在QTreeView中选择其他窗口小部件时显示和编辑有关各个配置项的额外元信息。根据配置项的类型,要显示的元字段数会有所不同,因此我尝试在QTableView中显示它们。

QDataWidgetMapper类似乎有助于此类功能,但我无法找到一次显示多个字段的小部件的任何示例(即除了行编辑,组合框,复选框,等等。)。代理模型似乎又是另一种潜在的路径,但我不确定如何通过这种方式根据选择显示模型的子集。

任何人都建议我如何使用模型/视图框架实现我的目标?

1 个答案:

答案 0 :(得分:1)

我最终想出了一个使用多种代理模型的解决方案。

我在模型中添加了其他列,过滤掉前三个包含信息,以便使用QTreeView的子类在QSortFilterProxyModel中显示。

然后将选择模型链接到为每个模型项设置“选定”属性的方法。一个代理模型inspired by this blog post首先将树展平为具有相同顺序的表格模型。然后,另一个代理模型根据选择属性过滤行,并从上面提到的扩展集中过滤非空列的另一个过滤器。

这会产生一个包含所需元信息的单行*表。要将其显示为列,从QAbstractProxyModel派生的附加代理模型用于通过将行映射到列来转置表,反之亦然。

*这是一行,因为在给定时间内只允许选择一个项目。