我尝试在QML中更新DelegateModel
(或VirtualDataModel
)的数据。
传递给DelegateModel
的模型数据似乎没有被触发到"拥有"过滤了DelegateModel
的模型。
那么,如何更新DelegateModel
的内部模型?
我用
尝试visualDataModel.items.get(1).model.name = "clicked"
似乎更新了内部模型。但这个结构看起来更像是一个黑客......
工作示例:
import QtQuick 2.5
import QtQuick.Window 2.2
import QtQml.Models 2.2
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
import QtQuick.Dialogs 1.2
Window {
visible: true
width: 400
height: 400
ListModel {
id: listModel
ListElement {
name: "test1"
key0: "1"
}
ListElement {
name: "test2"
key0: "1"
}
ListElement {
name: "test3"
key0: "0"
}
ListElement {
name: "test4"
key0: "0"
}
}
ListView {
id: listView
anchors.left: parent.left
anchors.right: parent.right
height: 200
model: visualDataModel
}
Button {
id: b
anchors.top: listView.bottom
text: "click me"
onClicked: {
listModel.get(1).name = "Clicked"
}
}
DelegateModel {
id: visualDataModel
model: listModel
groups: [
VisualDataGroup {
includeByDefault: false
name: "key0"
}
]
filterOnGroup: "key0"
delegate: Item {
height: 50
width: 50
Text {
text: name
}
}
Component.onCompleted: {
var rowCount = listModel.count;
items.remove(0, rowCount);
for(var i=0;i<rowCount;i++) {
var entry = listModel.get(i);
if(entry.key0 === "1") {
items.insert(entry, "key0");
}
}
}
}
}
答案 0 :(得分:0)
您可以从委托进行模型数据模拟。我已经改变了你的代表:
delegate: Item {
height: 50
width: 50
Text {
id: txt
anchors.top: parent.top
text: name
}
Button {
id: b
anchors.top: txt.bottom
text: "click me"
onClicked: {
name = "Clicked " + name
}
}
}
此外,我已从外部代表中删除了按钮。
现在每次在模型更改时单击delegete数据内的按钮。
答案 1 :(得分:0)
items.insert将创建新项目。 所以你应该使用items.setGroups,第三个参数是一个字符串数组,它必须包含“items”
祝你好运!