diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2018-03-19 15:01:43 +0100 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2018-03-21 13:21:38 +0000 |
commit | 01a40e1f920b58f00d52ff4542f6ef9c606a9b03 (patch) | |
tree | 6dfef0668b8755da15571b512e49d6d50ba1942c /src/quick/designer/qquickdesignersupportitems.cpp | |
parent | 21301c1dbb00f4a2cd991e520423ed039b297ffb (diff) |
Do not look up objects in deferred properties
If a property is a deferred property then skip it if
searching for qobjects.
This is not enough to avoid all asserts, but not reading
deferred properties does make sense in any case.
Task-number: QTBUG-67152
Change-Id: I495051745a5daf458909ff6c4cb5210597774ded
Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
Diffstat (limited to 'src/quick/designer/qquickdesignersupportitems.cpp')
-rw-r--r-- | src/quick/designer/qquickdesignersupportitems.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/quick/designer/qquickdesignersupportitems.cpp b/src/quick/designer/qquickdesignersupportitems.cpp index 9fadbb2122..82474827aa 100644 --- a/src/quick/designer/qquickdesignersupportitems.cpp +++ b/src/quick/designer/qquickdesignersupportitems.cpp @@ -94,11 +94,24 @@ static void allSubObjects(QObject *object, QObjectList &objectList) objectList.append(object); + const QMetaObject *mo = object->metaObject(); + + QStringList deferredPropertyNames; + const int namesIndex = mo->indexOfClassInfo("DeferredPropertyNames"); + if (namesIndex != -1) { + QMetaClassInfo classInfo = mo->classInfo(namesIndex); + deferredPropertyNames = QString::fromUtf8(classInfo.value()).split(QLatin1Char(',')); + } + for (int index = QObject::staticMetaObject.propertyOffset(); index < object->metaObject()->propertyCount(); index++) { + QMetaProperty metaProperty = object->metaObject()->property(index); + if (deferredPropertyNames.contains(metaProperty.name())) + continue; + // search recursive in property objects if (metaProperty.isReadable() && metaProperty.isWritable() |