forked from qt-creator/qt-creator
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 <thomas.hartmann@qt.io> Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io>
This commit is contained in:
@@ -291,7 +291,7 @@ static void removeObjectFromList(const QQmlProperty &property,
|
|||||||
|
|
||||||
int count = listReference.count();
|
int count = listReference.count();
|
||||||
|
|
||||||
QObjectList objectList;
|
QList<QPointer<QObject>> objectList;
|
||||||
|
|
||||||
for (int i = 0; i < count; i ++) {
|
for (int i = 0; i < count; i ++) {
|
||||||
QObject *listItem = listReference.at(i);
|
QObject *listItem = listReference.at(i);
|
||||||
@@ -301,8 +301,10 @@ static void removeObjectFromList(const QQmlProperty &property,
|
|||||||
|
|
||||||
listReference.clear();
|
listReference.clear();
|
||||||
|
|
||||||
for (QObject *object : std::as_const(objectList))
|
for (QObject *object : std::as_const(objectList)) {
|
||||||
listReference.append(object);
|
if (object)
|
||||||
|
listReference.append(object);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjectNodeInstance::removeFromOldProperty(QObject *object, QObject *oldParent, const PropertyName &oldParentProperty)
|
void ObjectNodeInstance::removeFromOldProperty(QObject *object, QObject *oldParent, const PropertyName &oldParentProperty)
|
||||||
|
Reference in New Issue
Block a user