我有理论上无限深的树模型和一些属性“群”。
除了标准视图之外,我还需要以这样的方式显示此模型(并保持同步),即每个组都成为具有相同属性值的所有项目的虚拟父级。
使用Qt的模型/视图体系结构实现这一点的最佳方法是什么?
不久前,我通过在模型中添加/删除项目时插入额外的虚拟“组”解决了类似的问题,但这种方法被证明不是很灵活,所以我正在寻找更好的解决方案。
理想情况下,目前我认为这是通过QSortProxyFilter模型实现的。
取决于最终结果:
无需实现QAbstractProxyModel即可实现过滤。
QSortFilterProxy模型可以按项角色进行排序,默认为Qt::DisplayRole。但如果将组属性置于项目的自定义角色中,则可以按此自定义角色排序:cf: https://doc.qt.io/qt-5/qsortfilterproxymodel.html#sortRole-prop
这应该完成按组排序的特定视图排序的主要工作。
但您没有“可折叠组”节点。很难说您是否可以使用自定义渲染器来管理等效功能。
否则,按照Felix的建议,很难实现将创建节点组索引的自定义QAbstractProxyModel。
最后一个解决方案:创建自己的(基本)模型(类似于MyTree和 Map<Group,Node> ,和两个Qt模型(每个视图一个)。当基础模型更新时,通过Qt的信号/插槽机制更新两个模型,反之亦然。
Map<Group,Node>