我有一个QTreeview,它使用QSortFilterProxyModel允许通过输入文本进行过滤,并且还使用QItemSelectionModel将选择保留在树视图上。
问题是,有什么办法可以避免过滤结果反映在项目选择上?
绘制我想要实现的目标,目前发生的事情是这样的。
状态 1。最初的。
Root
|---Leaf-1 Selected (manually)
|---Leaf-2
|---Leaf-3
状态 2。例如,通过“Leaf-3”过滤后,treeview 显示:
Root
|---Leaf-3
状态 3 非理想。然后清除过滤文本然后:
Root
|---Leaf-1
|---Leaf-2
|---Leaf-3
我希望“Leaf-1”保持选中状态,例如:
状态3-理想。
Root
|---Leaf-1 Selected
|---Leaf-2
|---Leaf-3
查看代码,当QSortFilterProxyModel.filterAcceptsRow返回 false 时,看起来QItemSelectionModel.selectionChanged的参数deselected
设置了要取消选择的项目的信息。而且我还没有找到任何方法来区分一个项目是手动取消选择还是通过过滤取消选择的。
我PyQt
在 Ubuntu 12.10 上使用,但我认为这应该适用于所有Qt
实现。