1

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

 - Study
  - Recording
   - Config

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

当在QTreeView. 根据配置项的类型,要显示的元字段的数量会有所不同,因此我尝试将它们显示在QTableView.

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

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

4

1 回答 1

1

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

我在模型中添加了额外的列,过滤掉前三个包含的信息,以便在QTreeView使用QSortFilterProxyModel.

然后将选择模型链接到为每个模型项设置“选定”属性的方法。受此博客文章启发的一个代理模型首先将树展平为具有相同顺序的类似表格的模型。然后另一个代理模型根据选择属性过滤行,另一个过滤器从上述扩展集中过滤非空列。

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

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

于 2013-01-05T21:50:12.307 回答