从 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行为,设置selectionMode
为SelectionMode.MultiSelection
或SelectionMode.ExtendedSelection
,不需要自己写取消选择函数。
但有时触发TreeView
之外的某些事件时仍然需要function deselectNode
。要实现 deselectNode
,它取决于 TreeView
的当前 selectionMode
:
- SelectionMode.NoSelection: 什么都不能选,
deselectNode
也不是必需的。
- SelectionMode.SingleSelection: 使用
myTreeView.selection.clearCurrentIndex()
清除当前选择。
- SelectionMode.MultiSelection, SelectionMode.ExtendedSelection, SelectionMode.ContiguousSelection:
myTreeView.selection.select(index, ItemSelectionModel.Deselect)
按预期工作。
实际上问题是我也在另一个地方设置了树的 currentIndex。所以我在问题中提到的函数实际上工作正常,可以通过编程方式从树中取消选择一个节点。
我想以编程方式和从 QML 中取消选择 Treeview 中的索引。我有一个函数接受需要取消选择的树节点的 QModelIndex,我执行以下操作:
function deselectNode(index)
{
myTreeView.selection.select(index, ItemSelectionModel.Deselect)
}
我希望此函数触发树上的 selectionChanged 事件并取消选择该索引,但它什么也没做。我也试过切换。还有另一种方法可以从树中取消选择一个节点吗?
换句话说,我想做 Cmd/Ctrl + 单击树节点所做的事情,但是在 Qml 中。
如果需要树节点上的Ctrl+Click行为,设置selectionMode
为SelectionMode.MultiSelection
或SelectionMode.ExtendedSelection
,不需要自己写取消选择函数。
但有时触发TreeView
之外的某些事件时仍然需要function deselectNode
。要实现 deselectNode
,它取决于 TreeView
的当前 selectionMode
:
- SelectionMode.NoSelection: 什么都不能选,
deselectNode
也不是必需的。 - SelectionMode.SingleSelection: 使用
myTreeView.selection.clearCurrentIndex()
清除当前选择。 - SelectionMode.MultiSelection, SelectionMode.ExtendedSelection, SelectionMode.ContiguousSelection:
myTreeView.selection.select(index, ItemSelectionModel.Deselect)
按预期工作。
实际上问题是我也在另一个地方设置了树的 currentIndex。所以我在问题中提到的函数实际上工作正常,可以通过编程方式从树中取消选择一个节点。