QML ListView由Javascript填充

Mar*_*era 8 javascript listview qml

我刚刚意识到(根据一些QML Bugreport),ListView的JSON代理缺失了.所以我有两个选择,用Javascript或C++创建的模型填充它

特别是我需要从预定义的URL下载.json数据并将它们解析为ListView.

我试图在Javascript中创建对象数组并将关联数组推送到ListView作为模型,但它失败了.无论我如何修改代码.

那么只有C++解决方案或我可以通过Javascript制作ListView模型吗?

谢谢

我试过的代码:

return [{"name":"value"}]
return {"name":"value"}
return [["name","value"]]
Run Code Online (Sandbox Code Playgroud)

问题始终是: ReferenceError: Can't find variable: name

Mar*_*era 20

根据mouli@irc.freenode.net#qt的建议,请执行以下操作:

文件:gui.qml

import "script.js" as Script

model: ListModel { id: list_model_id }
Run Code Online (Sandbox Code Playgroud)

file:script.js

function makeList(id){
    id.append({"name":"value1"});
    id.append({"name":"value2"});
}
Run Code Online (Sandbox Code Playgroud)

呼叫:

Script.makeList(list_model_id)
Run Code Online (Sandbox Code Playgroud)


Fel*_*lix 9

这可能有点晚了,但是使用Qt 5.5(可能更早,但测试5.5)你可以做到以下几点:

让我们假设您有一个这样的数组:
var dataArray = [{"name":"A"},{"name":"B"},{"name":"C"}]

QML中的代码显示此模型:

ListView {
    model: dataArray //the array from above
    delegate: Label {
        text: dataArray[index].name
    }
}
Run Code Online (Sandbox Code Playgroud)

index会提供的委托.它是模型中当前项的索引.有关更多信息,请参阅ListView委托属性.


Mit*_*tch 6

它更容易使用Component.onCompleted:

model: ListModel {
    Component.onCompleted: {
        append({"name": "A"});
        append({"name": "B"});
        append({"name": "C"});
    }
}
Run Code Online (Sandbox Code Playgroud)