从 QTreeView 中删除项目时取消选择所有行

Unselect all rows when deleting item from QTreeView

本文关键字:选择 取消 QTreeView 删除项目      更新时间:2023-10-16

我有QTreeView和选择模式:单选(选择模式(。

我想删除所选项目。然后调用rowsAboutToBeRemoved()函数,并按照注释中指定自动选择相邻项目:// Ensure one selected item in single selection mode

如何避免选择更改?

  1. 如何使删除后不会选择任何项目?
  2. 如何使已删除项目的父项将被选中?

给定:

QTreeView view;

我们可以访问QItemSelectionModel实例并暂时禁用信号:

QItemSelectionModel *selectModel = view.selectionModel();
selectModel->blockSignals(true);
//set the selection
selectModel->blockSignals(false);

快速插入源显示Qt将QItemSelectionModel::currentChanged()信号连接到视图的currentChanged()槽,这似乎是麻烦的根源。

大声思考:

QTreeView view;
...
QItemSelection Modem *selectModel = view.selectionModel();
disconnect(selectModel, &QItemSelectionModel::currentChanged,0, 0);

这真的有点严厉,但只要QTreeView被你严格控制,它可能值得一试。

我想另一种方法是滚动你自己的模型实现,这样你就可以在创建时控制连接。

(注意:感谢@Jon Harper,以便我可以复制/粘贴源代码;)。