【问题标题】:QTreeView clear selection if selected item is filtered如果选择的项目被过滤,QTreeView 清除选择
【发布时间】:2015-09-08 21:35:26
【问题描述】:

我有一个显示项目的 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 派生的解决方案。

【问题讨论】:

    标签: c++ qt qtreeview


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-10
      • 2014-01-30
      相关资源
      最近更新 更多