2015-09-08 3 views
0

У меня есть QTreeView, который отображает элементы и QSortFilterProxyModel для фильтрации. QTreeView настроен для SingleSelection и SelectRows.Четкий выбор QTreeView, если выбранный элемент отфильтрован

Если выбранный элемент удален с использованием фильтра, выбирается следующий элемент без фильтрации. Я хочу изменить это поведение. Моя нынешняя идея - подключиться к rowsAboutToBeRemoved() и очистить выделение, если выбранный элемент удален.

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

Однако интервал QT изменяет выбор к следующему пункту до того, как сигнал rowsAboutToBeRemoved() срабатывают. Поэтому я не могу проверить, выбран ли выбранный элемент.

Есть ли лучший способ очистить выбор, если элемент фильтруется? Я бы предпочел решение, которое не связано с получением QTreeView.

ответ

0

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 и/или ItemDeleg ел.

Смежные вопросы