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)
这可能有点晚了,但是使用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委托属性.
它更容易使用Component.onCompleted:
model: ListModel {
Component.onCompleted: {
append({"name": "A"});
append({"name": "B"});
append({"name": "C"});
}
}
Run Code Online (Sandbox Code Playgroud)