QML TreeView проходит предыдущий выбор при нажатии, чтобы свернуть или развернуть
У меня есть QML TreeView
содержащий некоторые onClicked()
логика, которая вызывает функцию Q_INVOKABLE, которая принимает текущий номер строки и номер родительской строки TreeView
в качестве параметров. Проблема в том, что когда я выбираю что-то, а затем нажимаю, чтобы развернуть или свернуть что-то. Предыдущие значения все еще передаются, что иногда приводит к сбою приложения. Я пытался позвонить treeView.selection.clearCurrentIndex()
а также treeView.selection.clearSelection()
в onCollapsed()
а также onExpanded()
который отменяет выбор элемента, но по какой-то причине все еще передает значения из ранее выбранного элемента.
//main.qml
TreeView {
id: treeView
anchors.fill: parent
model: treeviewmodel
selection: ItemSelectionModel {
model: treeviewmodel
}
TableViewColumn {
role: "name_role"
title: "Section Name"
}
onCollapsed: {
treeView.selection.clearSelection() // deselects the item, but still passes the previous values
}
onExpanded: {
treeView.selection.clearSelection()
}
onClicked: {
console.log("Current Row: " + treeView.currentIndex.row + "Parent Row: " + treeView.currentIndex.parent.row)
//I need something here that will set treeView.currentIndex.row and treeView.currentIndex.parent.row to -1
//so that when I collapse or expand, -1 gets passed instead of the previous values
}
}
1 ответ
Я смог решить эту проблему, установив некоторые дополнительные флаги (спасибо @Tarod за помощь). Мне пришлось сохранить значение строк, чтобы я мог проверить, изменились ли они. Если бы они не изменились, я бы не вызвал функцию, поэтому никакие устаревшие значения не были бы переданы.
TreeView {
id: treeView
anchors.fill: parent
model: treeviewmodel
property int currentRow: -1
property int parentRow: -1
property int lastCurrentRow: -1
property int lastParentRow: -1
selection: ItemSelectionModel {
model: treeviewmodel
}
TableViewColumn {
role: "name_role"
title: "Section Name"
}
onCollapsed: {
currentRow = -1
parentRow = -1
}
onExpanded: {
currentRow = -1
parentRow = -1
}
onClicked: {
console.log("Row: " + treeView.currentIndex.row + " Parent : " + treeView.currentIndex.parent.row)
//logic needed to not reselect last item when collpasing or expanding tree
if (lastCurrentRow === treeView.currentIndex.row && lastParentRow === treeView.currentIndex.parent.row)
{
currentRow = -1
parentRow = -1
}
else
{
lastCurrentRow = treeView.currentIndex.row
lastParentRow = treeView.currentIndex.parent.row
currentRow = treeView.currentIndex.row
parentRow = treeView.currentIndex.parent.row
}
if (currentRow === -1 && parentRow === -1)
{
//nothing selected - do nothing
}
else
{
//omitted some additional logic
}
}
}