用Javascript填充QML ListView

10
我刚刚意识到(根据一些QML错误报告),ListView缺少JSON代理。所以我有两个选择,用JavaScript或C ++创建的模型来填充它。
特别是我需要从预定义的URL下载.json数据并将其解析到ListView中。
我尝试在JavaScript中创建对象数组,并将关联数组作为Model推送到ListView中,但失败了。无论我如何修改代码都无法成功。
那么,只有C++解决方案吗?还是我可以通过JavaScript创建ListView模型?
谢谢
我尝试过的代码:
return [{"name":"value"}]
return {"name":"value"}
return [["name","value"]]

问题一直是:ReferenceError: Can't find variable: name

顺便提一下,我也做了同样的事情,但不是用JavaScript:https://code.google.com/p/qjsonpath/ - Jay
3个回答

22

鉴于来自 mouli@irc.freenode.net#qt 的建议,请执行以下操作:

文件:gui.qml

import "script.js" as Script

model: ListModel { id: list_model_id }

文件:script.js

function makeList(id){
    id.append({"name":"value1"});
    id.append({"name":"value2"});
}

调用:

Script.makeList(list_model_id)

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


6

使用Component.onCompleted要简单得多:

model: ListModel {
    Component.onCompleted: {
        append({"name": "A"});
        append({"name": "B"});
        append({"name": "C"});
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接