我刚刚意识到(根据一些QML Bugreport),ListView的JSON代理缺失了。所以我有两个选择,用Javascript或C ++创建的模型填充它
特别需要从预定义的URL下载.json数据并将它们解析为ListView。
我尝试在Javascript中创建对象数组并将关联数组推送到ListView作为模型,但它失败了。无论我如何修改代码。
那么只有C ++解决方案或我可以通过Javascript制作ListView模型吗?
由于
我试过的代码:
return [{"name":"value"}]
return {"name":"value"}
return [["name","value"]]
问题始终是:ReferenceError: Can't find variable: name
答案 0 :(得分:19)
根据mouli@irc.freenode.net#qt的建议,请执行以下操作:
file:gui.qml
import "script.js" as Script
model: ListModel { id: list_model_id }
file:script.js
function makeList(id){
id.append({"name":"value1"});
id.append({"name":"value2"});
}
致电:
Script.makeList(list_model_id)
答案 1 :(得分: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
}
}
将为代表提供index
。它是模型中当前项的索引。有关详细信息,请参阅ListView delegate property。
答案 2 :(得分:6)
使用Component.onCompleted
更容易:
model: ListModel {
Component.onCompleted: {
append({"name": "A"});
append({"name": "B"});
append({"name": "C"});
}
}