【问题标题】:QML ListView filled by Javascript由 Javascript 填充的 QML ListView
【发布时间】:2011-08-14 16:05:11
【问题描述】:

我刚刚意识到(根据一些 QML Bugreport)缺少用于 ListView 的 JSON 委托。所以我有两个选择,用 Javascript 或 C++ 创建的模型填充它

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

我尝试在 Javascript 中创建对象数组并将 assoc 数组作为模型推送到 ListView,但它失败了。不管我怎么修改代码。

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

谢谢

我试过的代码:

return [{"name":"value"}]
return {"name":"value"}
return [["name","value"]]

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

【问题讨论】:

标签: javascript listview qml


【解决方案1】:

根据 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)

【讨论】:

    【解决方案2】:

    使用Component.onCompleted更容易:

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

    【讨论】:

      【解决方案3】:

      可能有点晚了,但是使用 Qt 5.5(可能更早,但 testet 使用 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 了解更多信息。

      【讨论】:

        猜你喜欢
        • 2016-08-19
        • 1970-01-01
        • 2015-07-06
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多