QTreeView-排序和过滤模型

5 c++ qt

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

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

我尝试链接两个QSortFilterProxyModel:第一个用于排序,第二个用于过滤。但是似乎第二个proxymodel(filtering)没有收到排序的行。

还有另一种方法吗?有人使用过这种技术(2个代理模型的链接)并且有效吗?

谢谢

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

EDIT2:我研究了qt源代码,并且在排序之前完成了过滤,因此在filterAcceptsRow()中我不知道任何排序顺序。

小智 0

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

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

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