使用QSortFilterProxyModel过滤QTreeView中的父行,但不过滤子项

时间:2015-08-23 23:05:51

标签: qt qt5 qsortfilterproxymodel

如何使用QSortFilterProxyModel来过滤QTreeView但不是其子节点中的行?

假设我要过滤所有第一列文字为Mammal的行,但保留子行(例如MooseCat等)

如果在示例中模型包含:

Animals
    Mammals
        Moose
        Dog
        Cat
        Mouse

当应用过滤器时,视图将如下所示:

Animals
    Moose
    Dog
    Cat
    Mouse

可以使用QSortFilterProxyModel来完成吗?如果没有,我当然乐于接受建议。但是从我已经用于其他任务的代理中做到这一点会很好。

1 个答案:

答案 0 :(得分:0)

在文档中有一个方法QSortFilterProxyModel::mapToSource。 IMO这是解决这个问题的最佳人选。我知道这是一个很长的镜头,但与filterAcceptsRow一起使用它应该有效。

问题在于它没有很好的记录。 base class QAbstractProxyModel的文档说明您必须重新实施两种方法:mapFromSourcemapToSource。 Qt是一个开源项目,因此最好查看mapToSource及其对应的mapFromSource。如果我有时间,我会这样做并改进这个答案。