我有理论上无限深度的树模型和一些属性“组”。
除标准视图外,我还需要显示此模型(并保持同步),使每个组成为具有相同属性值的所有项目的虚拟父级。
使用Qt的模型/视图架构实现这一目标的最佳方法是什么?
我很久以前通过在模型中添加/删除项目时插入额外的虚拟“组”来解决类似的问题,但这种方法证明不是非常灵活,所以我正在寻找更好的解决方案。 / p>
理想情况下,我认为这是通过QSortProxyFilter模型实现的。现在。
答案 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的信号/插槽机制更新两个模型,反之亦然。