QML ListModel добавить сломанный для объекта, содержащего массив?

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, Таким образом, хотя размер соответствует размеру массива, никакого допустимого содержимого не существует.

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

1 ответ

Из ListModel документы:

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

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

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

Другие вопросы по тегам