qml에 트리 뷰가 있는데, 선택 모드는 ExtendedSelection입니다. 선택한 인덱스가 사용자에 의해 변경 될 때마다 어떤 트리 행이 선택되었는지 정확히 알 필요가 있습니다. 여기에 TreeView가 있습니다 :QSM의 selectedRows() ExtendedSelection이있는 TreeView는 한 걸음 뒤에 있습니다.
Controls.TreeView {
id: myTreeView
Controls.TableViewColumn {
title: "Name"
role: "name"
}
headerVisible: false
anchors.fill: parent
selection: ItemSelectionModel {
onCurrentIndexChanged: {
console.log(myTreeView.selection.selectedRows(0))
console.log(currentIndex)
}
}
selectionMode: Controls.SelectionMode.ExtendedSelection
onDoubleClicked: {
if (isExpanded(index))
collapse(index);
else
expand(index);
}
}
위 예제에서 선택한 행을 콘솔에 인쇄하여 올바르게 선택했는지 확인해보십시오. currentIndex
은 항상 마지막으로 선택한 색인을 보유하지만 (예상대로) 현재 선택된 모든 행을 보유하기로되어있는 selection.selectedRows()
은 항상 한 발 앞선 것입니다. 예를 들면 :는
경우 사용자 (Ctrl 키 채하는) 행 하나 1, 2, 3
하나 selection.selectedRows()
가 null, "1", "1,2"
되며 currentIndex
각각 1, 2, 3
될 것을 선택한다. 이 두 가지를 결합하여 선택된 상태에있는 모든 인덱스의 목록을 가져올 수 있습니다. 내 문제는 사용자가 Ctrl 키를 놓고 행 4
을 선택하면 null
이어도 selection.selectedRows()
은 "1,2,3"
이됩니다. 요약하면 사용자가 (Ctrl 키를 누른 상태에서) 행 1,2,3,4
을 선택한 경우와 Ctrl 키를 누른 상태에서 처음으로 행을 선택하고 Ctrl 키를 놓고 행 4
을 선택하는 경우를 구별 할 수 없습니다.
나는 또한 myTreeView.selection.selectedIndexes
으로 테스트했지만, 여전히 동일한 동작입니다. TreeView의 버그처럼 보입니다. 해결 방법에 대한 조언을 부탁드립니다.
감사합니다.