如果选择的项目已过滤,则QTreeView清除选择

时间:2015-09-08 13:07:25

标签: c++ qt qtreeview

我有一个显示项目的QTreeView和一个用于过滤的QSortFilterProxyModel。 QTreeView配置为SingleSelection和SelectRows。

如果使用过滤器删除了所选项目,则会选择下一个未过滤的项目。我想改变这种行为。我目前的想法是连接到rowsAboutToBeRemoved()并清除所选项目被移除的选择。

connect(_ui.treeView->model(), &QAbstractItemModel::rowsAboutToBeRemoved, 
[this] (const QModelIndex & parent, int start, int end) {//check and clear selection});

但是,QT会在触发rowsAboutToBeRemoved()信号之前将选择更改为下一个项目。所以我无法测试删除的项目是否是所选项目。

如果项目被过滤,是否有更好的方法来清除选择?我更喜欢不涉及从QTreeView派生的解决方案。

1 个答案:

答案 0 :(得分:1)

rowsAboutToBeRemoved不是一个信号,它是一个虚方法。

请参阅:http://doc.qt.io/qt-4.8/qtreeview.html

它不是QTreeView,而是具有信号的ItemModel:

http://doc.qt.io/qt-4.8/qitemselectionmodel.html#selectionChanged

QTreeWidget上有信号:

http://doc.qt.io/qt-5/qtreewidget.html#itemSelectionChanged

但是对于QTreeView,必须使用ItemModel和/或ItemDelegate。