2016-11-17 8 views
1

Я хотел бы отменить выбор индекса в Treeview программно и из QML. У меня есть функция, которая принимает QModelIndex узла дерева, которое должно быть отменено, и я следующее:Отменить индекс TreeView из QML

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

Я ожидаю, что эту функцию, чтобы вызвать событие SelectionChanged на дереве и отменить выбор этого индекса, но это делает ничего. Я также пытался с Toggle. Есть ли другой способ отменить выбор одного узла из дерева?

Другими словами, я хочу сделать то, что Cmd/Ctrl + Щелкните на узле дерева, но в Qml.

ответ

0

На самом деле проблема заключалась в том, что я устанавливал currentIndex своего дерева также в другом месте. Таким образом, функция, о которой я упоминал в моем вопросе, на самом деле работает нормально и может отменить выбор узла из дерева программным путем.

0

Если вам нужно поведение Ctrl + Click на узле дерева, установите selectionMode в SelectionMode.MultiSelection или SelectionMode.ExtendedSelection, вам не нужно писать собственную функцию отмены выбора.

Но иногда function deselectNode по-прежнему требуется, когда запускаются некоторые события за пределами TreeView. Для реализации deselectNode, это зависит от текущей selectionMode от TreeView:

  • SelectionMode.NoSelection: ничто не может быть выбрано и deselectNode не является необходимым.
  • SelectionMode.SingleSelection: используйте myTreeView.selection.clearCurrentIndex(), чтобы очистить текущий выбор.
  • SelectionMode.MultiSelection, SelectionMode.ExtendedSelection и SelectionMode.ContiguousSelection: myTreeView.selection.select(index, ItemSelectionModel.Deselect) работает, как ожидалось.