My ListView не показывает новые записи в моей модели при их добавлении.
Когда открывается диалоговое окно, я копирую QStringList из элемента C ++ в свойство Qml. Затем пользователь изменяет массив, используя предоставленные элементы управления (добавление, изменение, удаление).
К сожалению, ListView не обновляется, когда я изменяю свойство. Свойство изменено правильно (как видно из результатов отладки).
Как сделать так, чтобы ListView обновлялся автоматически с помощью привязки данных?
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
property var things
Component.onCompleted: things = [] // normally retrieved from C++ QStringList
ColumnLayout {
anchors.fill: parent
RowLayout {
Layout.fillWidth: true
TextField {
Layout.fillWidth: true
id: theTextField
}
Button {
Layout.fillWidth: true
text: qsTr("Append")
onPressed: {
things.push(theTextField.text)
console.log(things)
}
}
Button {
Layout.fillWidth: true
text: qsTr("Remove")
onPressed: {
var index = things.indexOf(theTextField.text)
if(index == -1)
console.warn('Not found!')
else
things.splice(index, 1)
console.log(things)
}
}
Button {
Layout.fillWidth: true
text: qsTr("Clear");
onPressed: {
things = [];
console.log(things)
}
}
}
ListView {
id: listView
Layout.fillWidth: true
Layout.fillHeight: true
model: things
delegate: Label {
text: modelData
}
}
}
}