“分组依据”代理模型

时间:2018-04-10 17:13:16

标签: c++ qt viewmodel qabstractitemmodel qsortfilterproxymodel

我有理论上无限深度的树模型和一些属性“组”。

original view

除标准视图外,我还需要显示此模型(并保持同步),使每个组成为具有相同属性值的所有项目的虚拟父级。

enter image description here

使用Qt的模型/视图架构实现这一目标的最佳方法是什么?

我很久以前通过在模型中添加/删除项目时插入额外的虚拟“组”来解决类似的问题,但这种方法证明不是非常灵活,所以我正在寻找更好的解决方案。 / p>

理想情况下,我认为这是通过QSortProxyFilter模型实现的。现在。

1 个答案:

答案 0 :(得分:1)

取决于您想要的最终结果:

  • 您无需实现QAbstractProxyModel即可实现过滤。

    QSortFilterProxyModel可以按Item角色排序,默认为Qt :: DisplayRole。但是,如果将组属性放在项目的自定义角色中,则可以按此自定义角色进行排序:cf: https://doc.qt.io/qt-5/qsortfilterproxymodel.html#sortRole-prop

    这应该是为Group排序的特定视图排序的主要工作。

    但是你不会有“可折叠组”节点。很难说是否可以使用自定义渲染器设置等效功能。

  • 否则,正如Felix所建议的那样,实现您的自定义QAbstractProxyModel将创建节点组索引。

  • 上一个解决方案:创建自己的(基础)模型(类似于MyTree和Map<Group,Node>,以及两个Qt模型(每个视图一个))。更新基础模型时,通过Qt的信号/插槽机制更新两个模型,反之亦然。