aboutsummaryrefslogtreecommitdiffstats
path: root/src/qmlmodels
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2022-07-25 14:24:19 +0200
committerUlf Hermann <ulf.hermann@qt.io>2022-07-26 21:17:28 +0200
commit6ea2a1cdb728635f9bd3cf239f751d4e88610881 (patch)
tree8db607732c7fcd1ea8dd4d0692f1d1046a4fa6a8 /src/qmlmodels
parentaa9412615bf7cee3fdcfd3854ba73f4cb3ed93b7 (diff)
QQmlListAccessor: Accept QQmlListProperty
So far we have only accepted QQmlListReference. However, we can also pass a QQmlListProperty around as value. Pick-to: 6.2 6.3 6.4 Fixes: QTBUG-105137 Change-Id: I7d4cd3048b62594298f91013c4cda5ec864a28df Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Diffstat (limited to 'src/qmlmodels')
-rw-r--r--src/qmlmodels/qqmladaptormodel.cpp4
-rw-r--r--src/qmlmodels/qqmllistaccessor.cpp4
2 files changed, 7 insertions, 1 deletions
diff --git a/src/qmlmodels/qqmladaptormodel.cpp b/src/qmlmodels/qqmladaptormodel.cpp
index 2187cd1550..080cd90aa6 100644
--- a/src/qmlmodels/qqmladaptormodel.cpp
+++ b/src/qmlmodels/qqmladaptormodel.cpp
@@ -956,7 +956,9 @@ void QQmlAdaptorModel::setModel(const QVariant &variant)
{
accessors->cleanup(*this);
+ // Don't use variant anymore after this. list may transform it.
list.setList(variant);
+
modelStrongReference.clear();
if (QObject *object = qvariant_cast<QObject *>(list.list())) {
@@ -968,7 +970,7 @@ void QQmlAdaptorModel::setModel(const QVariant &variant)
else
accessors = new VDMObjectDelegateDataType;
} else if (list.type() == QQmlListAccessor::ListProperty) {
- auto object = static_cast<const QQmlListReference *>(variant.constData())->object();
+ auto object = static_cast<const QQmlListReference *>(list.list().constData())->object();
if (QQmlData *ddata = QQmlData::get(object))
modelStrongReference = ddata->jsWrapper;
setObject(object);
diff --git a/src/qmlmodels/qqmllistaccessor.cpp b/src/qmlmodels/qqmllistaccessor.cpp
index 244a1b369d..d68d0a2b90 100644
--- a/src/qmlmodels/qqmllistaccessor.cpp
+++ b/src/qmlmodels/qqmllistaccessor.cpp
@@ -39,6 +39,7 @@ void QQmlListAccessor::setList(const QVariant &v)
d = d.value<QJSValue>().toVariant();
variantsType = d.metaType();
}
+
if (!d.isValid()) {
m_type = Invalid;
} else if (variantsType == QMetaType::fromType<QStringList>()) {
@@ -49,6 +50,9 @@ void QQmlListAccessor::setList(const QVariant &v)
m_type = VariantList;
} else if (variantsType == QMetaType::fromType<QList<QObject *>>()) {
m_type = ObjectList;
+ } else if (variantsType.flags() & QMetaType::IsQmlList) {
+ d = QVariant::fromValue(QQmlListReference(d));
+ m_type = ListProperty;
} else if (variantsType == QMetaType::fromType<QQmlListReference>()) {
m_type = ListProperty;
} else if (variantsType.flags() & QMetaType::PointerToQObject) {