假设我们有以下代码:
import QtQuick 2.4
import QtQuick.Window 2.0
import QtQuick.Controls 1.2
import QtQuick.Layouts 1.1
Window {
id: win
width: 800
height: 600
ListModel {
id: listModel
ListElement { name: "element1" }
ListElement { name: "element2" }
ListElement { name: "element3" }
}
ColumnLayout {
anchors.centerIn: parent
width: 200
height: 200
ComboBox {
model: listModel
currentIndex: 1
Layout.fillWidth: true
}
ListView {
model: listModel
delegate: Text {
text: name
}
Layout.fillHeight: true
Layout.fillWidth: true
}
Button {
text: "Change model"
onClicked: {
listModel.get(1).name = "changed text";
//listModel.setProperty(1,"name","changed text"); this line not works too
}
}
}
}
因此,单击按钮必须更改索引为1的模型元素。但更改模型仅影响ListView
。 ComboBox
保持不变。
为什么会这样?是bug还是功能?有没有办法在更改模型后更新ComboBox
?
答案 0 :(得分:0)
我有类似的问题,我使用了一种解决方法。在按钮的onClicked函数中,创建模型的副本,根据需要进行更改,然后再将其分配给ListViews模型:
ListView {
id: listView
...
}
Button {
onClicked: {
var copy = listView.model;
copy.get(1).name = "changed text";
listView.model = copy; }
}
}