вроде опять же простейшая задача
структура
struct QmlXmlNode
{
QString name;
QVariantMap attributes;
QVariantList children;
Q_GADGET
Q_PROPERTY(QString name MEMBER name)
Q_PROPERTY(QVariantMap attributes MEMBER attributes)
Q_PROPERTY(QVariantList children MEMBER children)
};
С++ метод генерации объекта структуры:
QmlXmlNode createQmlXmlNode()
{
return {};
}
Qml:
var qmlXmlNode = QmlXmlHandler.createQmlXmlNode();
qmlXmlNode.children.push(QmlXmlHandler.createQmlXmlNode());
qmlXmlNode.children.push(QmlXmlHandler.createQmlXmlNode());
qmlXmlNode.children.push(QmlXmlHandler.createQmlXmlNode());
console.log(qmlXmlNode.children.length); <————— выведет 0
добавлю C++ метод
void appendToQmlXmlNode(QmlXmlNode& dest, const QmlXmlNode& src)
{
dest.children.append(QVariant::fromValue(src));
qDebug() << dest.children.count(); // <———————— всегда будет выводить 1
}
QML:
var qmlXmlNode = QmlXmlHandler.createQmlXmlNode();
QmlXmlHandler.appendToQmlXmlNode(qmlXmlNode,QmlXmlHandler.createQmlXmlNode());
QmlXmlHandler.appendToQmlXmlNode(qmlXmlNode,QmlXmlHandler.createQmlXmlNode());
QmlXmlHandler.appendToQmlXmlNode(qmlXmlNode,QmlXmlHandler.createQmlXmlNode());
console.log(qmlXmlNode.children.length); <————— снова выведет 0
так вот на этом простом примере хотелось бы понять, это в QML какой-то сборщик мусора что ли чистит список? или что происходит ?
Так Q_GADGET всегда как копия между qml и c++ передается
а, я думал линк. ну хорошо, пусть копия - это объясняет почему не работает плюсовый метод appendToQmlXmlNode но почему же тогда QML метод .push не работает из первого варианта и список всегда пустой ?
по этой же причине. вот так делайте: var localArrayCopy = obj.array localArrayCopy.push(1) console.log(localArrayCopy.length) obj.array = localArrayCopy
когда вы пишите obj.array.push(1) console.log(obj.array.length) // output 0 obj.array создает копию, добавляет в копию 1 и ничего при этом с самим массивом obj не происходит
Обсуждают сегодня