QTreeView:筛选内容 - 寻找最佳实践

问题描述:

我有一个QTreeView,我希望筛选其中的内容。我只希望过滤*子级(即根目录下的子级)的这些内容。目前我正在通过在我的QTreeView子类中创建一个简单的过滤方法并选择性地隐藏那些不匹配的行来完成此操作。QTreeView:筛选内容 - 寻找最佳实践

虽然上面的方法似乎工作正常,我想知道是否应该重新实现这个使用QSortFilterProxyModel。如果是这样,那么优势是什么?

如果我改变使用QSortFilterProxyModel,我有几个(希望小)问题:

1)因为我在*儿童进行筛选,我将不得不重新实现任何方法是实际上是为了让所有的孙子独自离开而进行分类,对吧?

2)我的数据模型有一些自定义的方法,它负责独特的键盘导航等。我是否会在代理模型中重新实现这些模型,并让它们指向我的数据模型的方法?如果是这样,我如何参考模型?我似乎无法找到任何与QTreeView的model()方法相媲美的东西。

谢谢!

使用QSortFilterProxyModel中的派生类更好。您保留在树视图外进行排序的责任。

以最大重用现有的代码,您可以覆盖filterAcceptsRow这样

bool MySortFilterProxyModel::filterAcceptsRow(int sourceRow, 
    const QModelIndex &sourceParent) const 
{ 
    if(sourceParent.IsValid()) return true; // Don't filter other than top level 

    return QSortFilterProxyModel(sourceRow, sourceParent); 
} 

对于自定义方法,你将需要实现他们在您的代理。然后,为了导航,您可能需要使用mapToSource和mapFromSource将代理索引转换为orignal模型索引