QML ListModel append broken для объекта, содержащего массив?

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

Несколько наблюдений-похоже , что массив каким-то образом «преобразован» в aQQmlListModel, и это еще один экземпляр модели списка, а не тот, к которому добавляется. Кроме того, изначально я думал, что это действительно может быть какое-то автоматическое преобразование и ожидал, что модель списка будет содержать пять номеров и действительно countсоставляет 5, однако get(0)возвращает an undefined. Таким образом, хотя размер совпадает с размером массива, нет никакого допустимого содержимого вообще.

Я уверен, что это ошибка, но тем не менее я бы спросил, Если кто-то знает, что происходит, прежде чем подавать отчет об ошибке.

1 ответ

  1. Из ListModelдокументов:

    ListModel-это простой контейнер определений ListElement […]

    Если вы затем перейти к документации ListElement:

    Значения должны быть простыми константами; либо строки (в кавычках и необязательно в вызове QT_TR_NOOP), логические значения (true, false), числа или значения перечисления (например, AlignText.AlignHCenter).