diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2022-11-18 18:14:19 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-11-23 08:17:47 +0000 |
commit | f284ba291766ae3aa6d52dc7402c74b6a1674ab4 (patch) | |
tree | 7ebfc0bd77b17dc6709c1a753ad98ff3adacec82 /src | |
parent | 5065c6de5af7687b6f825f83f37ecc9dffcf87cc (diff) |
Don't crash on QQmlGadgetPtrWrapper instances in debug service
They have the confusing property of being a QObject but having a
QMetaObject that says it's a Q_GADGET.
Fixes: QTBUG-108646
Change-Id: I6df34c2004918cd89691f4b5eb4b6267dabcd7ff
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
(cherry picked from commit deda185ba95ffb99b1500364e2eba774e9dbc1e6)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp b/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp index 1fcc1e7772..578b07cb22 100644 --- a/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp +++ b/src/plugins/qmltooling/qmldbg_debugger/qqmlenginedebugservice.cpp @@ -147,7 +147,8 @@ QQmlEngineDebugServiceImpl::propertyData(QObject *obj, int propIdx) { QQmlObjectProperty rv; - QMetaProperty prop = obj->metaObject()->property(propIdx); + const QMetaObject *metaObject = obj->metaObject(); + QMetaProperty prop = metaObject->property(propIdx); rv.type = QQmlObjectProperty::Unknown; rv.valueTypeName = QString::fromUtf8(prop.typeName()); @@ -158,7 +159,10 @@ QQmlEngineDebugServiceImpl::propertyData(QObject *obj, int propIdx) if (binding) rv.binding = binding->expression(); - rv.value = valueContents(prop.read(obj)); + if (metaObject->metaType().flags().testFlag(QMetaType::IsGadget)) + rv.value = valueContents(static_cast<QQmlGadgetPtrWrapper *>(obj)->readOnGadget(prop)); + else + rv.value = valueContents(prop.read(obj)); if (prop.metaType().flags().testFlag(QMetaType::PointerToQObject)) { rv.type = QQmlObjectProperty::Object; |