包含数组的对象的QML ListModel追加中断

QML ListModel append broken for object containing an array?

本文关键字:追加 中断 ListModel 对象 数组 包含 QML      更新时间:2023-09-26

ListModel在尝试插入包含数组的JS对象时会产生意外且几乎不稳定的结果:

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。因此,虽然大小与数组的大小相匹配,但没有任何有效的内容。

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

来自ListModel文档:

ListModel是ListElement定义的一个简单容器〔…〕

如果您随后转到ListElement:的文档

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