“分组依据”代理模型

2024-01-22

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

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

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

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

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


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

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

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

    这应该完成对按组排序的特定视图进行排序的主要工作。

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

  • 否则,按照 Felix 的建议,困难的方法是实现将创建节点组索引的自定义 QAbstractProxyModel。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“分组依据”代理模型 的相关文章

随机推荐