From 9d6d5216433b4eff132a5ca4430a0dc3b788eb72 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 16 Feb 2024 14:43:10 +0200 Subject: [PATCH] QmlDesigner: Fix crash when reparenting items into effected item Some effect related objects such as QQuickShaderEffectSource can be silently removed alongside another object, so use QPointer to ensure all objects are still valid before readding them. Fixes: QDS-11973 Change-Id: I75ee2dc81e27774f8be87b031e149b135ec84023 Reviewed-by: Thomas Hartmann Reviewed-by: Qt CI Patch Build Bot --- .../qml2puppet/instances/objectnodeinstance.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/tools/qml2puppet/qml2puppet/instances/objectnodeinstance.cpp b/src/tools/qml2puppet/qml2puppet/instances/objectnodeinstance.cpp index 941a1d50b90..a1c727f215b 100644 --- a/src/tools/qml2puppet/qml2puppet/instances/objectnodeinstance.cpp +++ b/src/tools/qml2puppet/qml2puppet/instances/objectnodeinstance.cpp @@ -291,7 +291,7 @@ static void removeObjectFromList(const QQmlProperty &property, int count = listReference.count(); - QObjectList objectList; + QList> objectList; for (int i = 0; i < count; i ++) { QObject *listItem = listReference.at(i); @@ -301,8 +301,10 @@ static void removeObjectFromList(const QQmlProperty &property, listReference.clear(); - for (QObject *object : std::as_const(objectList)) - listReference.append(object); + for (QObject *object : std::as_const(objectList)) { + if (object) + listReference.append(object); + } } void ObjectNodeInstance::removeFromOldProperty(QObject *object, QObject *oldParent, const PropertyName &oldParentProperty)