From aabff7bd35595309c34251d6fccb1484a9078d86 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Thu, 24 Mar 2022 17:43:23 +0100 Subject: QmlDesigner: Fix puppet crash with DelegateModel Change-Id: Ibe42b87b6364c78157c54504f00354bff8bb4b23 Reviewed-by: Tim Jenssen --- .../qml/qmlpuppet/qmlprivategate/qmlprivategate_56.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate_56.cpp b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate_56.cpp index 3213d50786..c9f2820b74 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate_56.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate_56.cpp @@ -185,13 +185,13 @@ void registerNodeInstanceMetaObject(QObject *object, QQmlEngine *engine) QQuickDesignerSupportProperties::registerNodeInstanceMetaObject(object, engine); } -static bool isQuickStyleItemMetaObject(const QMetaObject *metaObject) +static bool isMetaObjectofType(const QMetaObject *metaObject, const QByteArray &type) { if (metaObject) { - if (metaObject->className() == QByteArrayLiteral("QQuickStyleItem")) + if (metaObject->className() == type) return true; - return isQuickStyleItemMetaObject(metaObject->superClass()); + return isMetaObjectofType(metaObject->superClass(), type); } return false; @@ -200,7 +200,15 @@ static bool isQuickStyleItemMetaObject(const QMetaObject *metaObject) static bool isQuickStyleItem(QObject *object) { if (object) - return isQuickStyleItemMetaObject(object->metaObject()); + return isMetaObjectofType(object->metaObject(), "QQuickStyleItem"); + + return false; +} + +static bool isDelegateModel(QObject *object) +{ + if (object) + return isMetaObjectofType(object->metaObject(), "QQmlDelegateModel"); return false; } @@ -400,7 +408,7 @@ void doComponentCompleteRecursive(QObject *object, NodeInstanceServer *nodeInsta doComponentCompleteRecursive(child, nodeInstanceServer); } - if (!isQuickStyleItem(item)) { + if (!isQuickStyleItem(object) && !isDelegateModel(object)) { if (item) { static_cast(item)->componentComplete(); } else { -- cgit v1.2.3