Как показать текущий выбор QML TreeView?
Я могу показать текущий выбор QML ListView, но похожая вещь не работает в TreeView.
Часть проблемы для TreeView, которую он не распознает index
который передается делегату в случае ListView
, Я старался styleData.index
но это тоже не работает.
rowDelegate: Item {
id: row_delegate
height: 40
Rectangle {
id: rectid
anchors.fill: parent
MouseArea {
id: mouse_area
anchors.fill: parent
onClicked: {
console.log("Row clicked " + rectid.styleData.index)
}
}
}
}
Выход:
qml: строка нажата не определено
1 ответ
Как указано в документации, у вас есть набор свойств в пространстве имен styleData
это может использоваться для почти тех же целей внутри делегата.
Например, вы можете установить свойство text метки, которая является частью вашего делегата, следующим образом:
text: styleData.value
куда styleData.value
есть (отрывок документации):
значение или текст для этого элемента
Точно так же у вас есть:
styleData.pressed - true при нажатии элемента
styleData.index - QModelIndex текущего элемента в модели
styleData.hasChildren - true, если индекс модели текущего элемента имеет или может иметь детей
И так далее... Пожалуйста, обратитесь к документации для полного списка.
Также обратите внимание на примечание в конце документации:
Примечание. Из соображений производительности созданные делегаты можно повторно использовать в нескольких строках таблицы. Это подразумевает, что когда вы используете неявные свойства, такие как styleData.row или model, эти значения могут измениться после создания делегата. Это означает, что вы не должны предполагать, что содержимое исправлено при вызове Component.onCompleted, а вместо этого полагаться на привязки к таким свойствам.