Как показать текущий выбор 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, а вместо этого полагаться на привязки к таким свойствам.

Другие вопросы по тегам