对QAbstractProxyModel进行子类化,添加源模型中不存在的树节点

时间:2014-03-20 10:20:38

标签: c++ qt qabstractitemmodel

我正在尝试实现一个ProxyModel,它采用代表平面,类似表结构的源模型。 然后,您可以选择此模型的一列作为分组值。 然后,代理模型应该创建尽可能多的顶级节点,因为此列有不同的值,并将基础行排序到它们中。

但是,在这样做时,是否将QAbstractProxyModel作为一个可行的选项? 由于mapToSource(const QModelIndex& proxyIndex)并不总是返回有效代理索引的有效源索引。

是否有人有更好的解决方案,可能只使用没有内置代理功能的QAbstractItemModel

2 个答案:

答案 0 :(得分:1)

以下是两个解决此问题的示例项目,供任何人以后参考。 (其中一个是我的,我不是指垃圾邮件,它似乎相关。)

GroupedItemsProxyModeldoc
QGroupingProxyModeldoc

编辑(回复评论):我相信这两个项目都会实现问题。我认为检查源代码提供了最好的示例,显然太长了,无法将其全部粘贴到此处。我直接提供了与源和相关文档的链接。

答案 1 :(得分:0)

更新:对不起,明白这有点不对劲。我从来没有从抽象代理模型派生,所以我不确定。但是我会开始使用QSortFilterProxyModel。可能会发生它有一些你不需要的功能,但这并没有伤害。另一方面,实施代理模型可能会受到影响,因为它需要额外的工作和专业知识。

如果您在代理模型中从非分组结构切换到分组结构时遇到问题,请考虑切换视图模型(一个显示分组数据,一个显示原始未分组数据)。