QTreeView - 对模型进行排序和过滤

时间:2009-06-30 08:42:22

标签: c++ qt

我正在尝试创建一个显示某些已排序信息的QTreeView。为此,我在视图和模型之间使用了QSortFilterProxyModel。

问题是我想将行数限制为前n行(排序后)。模型中的过滤函数接收原始sourceRow,因此我无法使用它。

我已尝试链接两个QSortFilterProxyModel:第一个用于排序,第二个用于过滤。但似乎第二个代理模型(过滤)没有收到排序的行......

还有其他办法吗? 有没有人使用这种技术(链接2个代理模型)并且它有效?

谢谢

编辑: 我已尝试使用rowCount,但它不起作用。 我也尝试链接2个代理模型,但问题是视图调用它接收的模型的sort函数。因此,如果第一个代理进行排序,第二个过滤器将在过滤器模型上调用排序,并且不会对数据进行排序。

EDIT2:我查看了qt源代码并在排序之前完成了过滤,所以在filterAcceptsRow()中我不知道任何排序顺序。

2 个答案:

答案 0 :(得分:0)

出于好奇,您是否尝试重写rowCount方法并返回25(或者 n 在您的情况下)?它可能就是那么简单......好吧,如果你总是至少有 n 项目。

否则,您可以尝试链接模型。我不知道为什么它不起作用,但我自己从未尝试过类似的东西。

答案 1 :(得分:0)

在尝试了一些过于复杂的方法来解决这个问题后,我为我的问题做了一个小小的黑客攻击:在插入/删除一行后,我调用setRowHidden来隐藏前n行。 这不是最优雅的解决方案,特别适合我的需求,但我无法找到更好的替代方案。

我想在gtk上提一下,因为过滤器和排序代理模型是分开的,所以这可以很容易地完成。

我仍然希望有人可以为此提供更好的解决方案。