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).