QML ListModel追加包含数组的对象?

时间:2016-05-06 10:02:51

标签: javascript arrays qt qml listmodel

在尝试插入包含数组的JS对象时,

ListModel会产生意外且非常破碎的结果:

property ListModel model : ListModel {}

Component.onCompleted: {
  var a = [1, 2, 3, 4, 5]
  console.log(a)
  model.append({"a" : a})
  console.log(model.get(model.count - 1))
  console.log(model.get(model.count - 1).a)

输出是:

qml: [1,2,3,4,5]
qml: QObject(0x3cccd58)
qml: QQmlListModel(0x3cd0978)

但是,如果数组连接成一个字符串,它将按预期工作:

  console.log(a)
  a = a.join(",")
  model.append({"a" : a})
  console.log(model.get(model.count - 1))
  console.log(model.get(model.count - 1).a)

qml: [1,2,3,4,5]
qml: QObject(0x3d5da60)
qml: 1,2,3,4,5

一些观察 - 似乎数组以某种方式“转换”为QQmlListModel,它是另一个列表模型实例,而不是被附加到的实例。此外,最初我虽然这可能确实是一些自动转换,并且期望列表模型包含五个数字,确实count为5,但get(0)返回undefined。因此,虽然大小与数组的大小相匹配,但没有任何有效的内容。

我很确定这是一个错误,但不过我会在提交错误报告之前询问是否有人知道发生了什么。

1 个答案:

答案 0 :(得分:0)

来自the ListModel docs

  

ListModel是ListElement定义[...]

的简单容器

如果您转到documentation of ListElement

  

值必须是简单常量;字符串(引用并且可选地在对QT_TR_NOOP的调用中),布尔值(true,false),数字或枚举值(例如AlignText.AlignHCenter)。