Json 是否可以将复杂类型项添加到ListModel?
我希望有一个类似于ListModel的结构来显示简单状态机的输入。每个输入可能由几个字符串/整数组成。因此,我需要Json 是否可以将复杂类型项添加到ListModel?,json,listview,qml,qtquick2,Json,Listview,Qml,Qtquick2,我希望有一个类似于ListModel的结构来显示简单状态机的输入。每个输入可能由几个字符串/整数组成。因此,我需要ListModel的每一项都能够存储数据列表(带有输入参数名称的字符串,或带有字符串的字典等)。目前,我无法将具有列表属性的项附加到ListModel 因此,ListModel如下所示: ListView { anchors.fill: parent model: ListModel { id: listModel } delega
ListModel
的每一项都能够存储数据列表(带有输入参数名称的字符串,或带有字符串的字典等)。目前,我无法将具有列表属性的项附加到ListModel
因此,ListModel
如下所示:
ListView {
anchors.fill: parent
model: ListModel {
id: listModel
}
delegate: Text {
text: inputs[0]['name']
}
}
var state = {
name: "abcd",
inputs: [{name: 'a'}, {name: 'b'}, {name: 'c'}]
}
listModel.append(state);
当状态改变时,我想更新模型并添加如下元素:
ListView {
anchors.fill: parent
model: ListModel {
id: listModel
}
delegate: Text {
text: inputs[0]['name']
}
}
var state = {
name: "abcd",
inputs: [{name: 'a'}, {name: 'b'}, {name: 'c'}]
}
listModel.append(state);
当前版本的代码返回错误TypeError:无法读取未定义的属性“name”
。它没有看到列表
根据,在ListModel
的项目中使用列表可能会出现问题。但这似乎与我的情况无关。也许我需要在QML中使用不同的列表和dict,也许我必须在delegate(我尝试过)或其他东西(建议?)中编写text:inputs[0].name
有人能建议如何在
ListModel
中创建更复杂或更不复杂的项(基本上,它是标准JSON)吗?这并不清楚,因为文档和博客/问题一直都在处理字符串。是否有一些我遗漏的有用文档?在QML中有哪些好的实践?我应该使用一些自定义对象吗?列表数据可以根据和添加到列表元素中,正如您在命令式代码中正确执行的那样。但是,嵌套角色实际上不是数组。它们本身就是ListModel
s。这是因为,如果数组的某个元素发生更改,QML不会生成通知,这将成为模型视图委托设置中的显示停止符
因为嵌套角色是一个模型,所以可以使用模型的函数。例如,此示例非常有效:
import QtQuick 2.5
import QtQuick.Window 2.2
Window {
id: window
width: 600
height: 400
visible: true
ListView {
anchors.fill: parent
model: ListModel {
id: listModel
}
delegate: Text {
text: name + inputs.get(index % inputs.count).name // accessing the inner model
}
}
MouseArea {
anchors.fill: parent
onClicked: {
var state = {
name: "abcd",
inputs: [{name: 'a'}, {name: 'b'}, {name: 'c'}]
}
listModel.append(state);
}
}
}
根据您的问题,输入是纯JSON。在这种情况下,考虑使用代替<代码> ListMadie。它通过JSONPath公开了一组与XMLListModel
匹配的API,可能是您的场景的完美解决方案