From 824486dc34e2dfb72b17808a6496d8c026fe7f23 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: Tim Jenssen Reviewed-by: Miikka Heikkinen --- .../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 e66a55e82f2..5cc8a715893 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)