У меня есть QML TreeView
, содержащий некоторую логику onClicked()
, которая вызывает функцию Q_INVOKABLE, которая принимает в качестве параметров текущий номер строки и номер родительской строки TreeView
. Проблема в том, что когда я что-то выбираю, а затем я нажимаю, чтобы развернуть или свернуть что-то. Предыдущие значения по-прежнему передаются, что иногда приводит к сбою приложения. Я попытался позвонить treeView.selection.clearCurrentIndex()
и treeView.selection.clearSelection()
в onCollapsed()
и onExpanded()
, который отменяет выбор элемента, но по какой-то причине все еще передает значения из ранее выбранного элемента.QML TreeView передает предыдущий выбор при нажатии, чтобы свернуть или развернуть
//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 в событии 'onClicked'. – Tarod
@Tarod Что значит атрибуты? Можете ли вы уточнить? Благодаря! –
Если вам нужно передать -1 вашей функции Q_INVOKABLE после свернуть или развернуть дерево, используйте флаг и установите его значение true после свертывания или расширения дерева. После этого, когда вызывается событие onClicked, проверьте флаг: передайте -1 в функцию Q_INVOKABLE, если это правда, или используйте «treeView.currentIndex.row» и «treeView.currentIndex.parent.row», предоставленные QML, если false. При необходимости измените значение флага на значение false. Может быть, я не понял проблему, но это решение, которое я подумал после прочтения вопроса. – Tarod