从 QML 中取消选择 TreeView 的索引

Deselect an index of TreeView from QML

我想以编程方式和从 QML 中取消选择 Treeview 中的索引。我有一个函数接受需要取消选择的树节点的 QModelIndex,我执行以下操作:

function deselectNode(index)
{
 myTreeView.selection.select(index, ItemSelectionModel.Deselect)
} 

我希望此函数触发树上的 selectionChanged 事件并取消选择该索引,但它什么也没做。我也试过切换。还有另一种方法可以从树中取消选择一个节点吗?

换句话说,我想做 Cmd/Ctrl + 单击树节点所做的事情,但是在 Qml 中。

如果需要树节点上的Ctrl+Click行为,设置selectionModeSelectionMode.MultiSelectionSelectionMode.ExtendedSelection,不需要自己写取消选择函数。

但有时触发TreeView之外的某些事件时仍然需要function deselectNode。要实现 deselectNode,它取决于 TreeView 的当前 selectionMode:

  • SelectionMode.NoSelection: 什么都不能选,deselectNode也不是必需的。
  • SelectionMode.SingleSelection: 使用myTreeView.selection.clearCurrentIndex()清除当前选择。
  • SelectionMode.MultiSelection, SelectionMode.ExtendedSelection, SelectionMode.ContiguousSelectionmyTreeView.selection.select(index, ItemSelectionModel.Deselect) 按预期工作。

实际上问题是我也在另一个地方设置了树的 currentIndex。所以我在问题中提到的函数实际上工作正常,可以通过编程方式从树中取消选择一个节点。