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

时间:2018-06-15 14:35:35

标签: c++ qt

我有选择模式的QTreeView:SingleSelection(selection modes)。

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

如何避免选择更改?

  1. 如何删除后不会选择任何项目?
  2. 如何选择已删除项目的父级?

2 个答案:

答案 0 :(得分:1)

假设:

QTreeView view;

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

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

快速点击来源显示Qt将QItemSelectionModel::currentChanged()信号连接到视图的currentChanged()广告位,这似乎是您遇到问题的根源。

答案 1 :(得分:1)

大声思考:

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

这真的很重,但只要QTreeView受到你的严格控制,它就值得一试。

我认为另一种方法是推出自己的模型实现,以便在创建时控制连接。

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