Json 是否可以将复杂类型项添加到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

因此,
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,可能是您的场景的完美解决方案