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 <tim.jenssen@qt.io>
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
This commit is contained in:
Miikka Heikkinen
2024-02-16 14:43:10 +02:00
committed by Tim Jenssen
parent 5fd12624a0
commit 824486dc34

View File

@ -291,7 +291,7 @@ static void removeObjectFromList(const QQmlProperty &property,
int count = listReference.count();
QObjectList objectList;
QList<QPointer<QObject>> 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)