diff --git a/src/tools/qml/qmldump/main.cpp b/src/tools/qml/qmldump/main.cpp index 65b7a9dd2ff22333df55491e555f9cb733fdc328..5eec77a6ad08d08d6de50cb006fdbafdc6b88bf8 100644 --- a/src/tools/qml/qmldump/main.cpp +++ b/src/tools/qml/qmldump/main.cpp @@ -9,7 +9,10 @@ #include <QDebug> #include <iostream> #include <QtDeclarative> +#include <QtCore/private/qobject_p.h> +#include <QtCore/private/qmetaobject_p.h> #include <QtDeclarative/private/qdeclarativemetatype_p.h> +#include <QtDeclarative/private/qdeclarativeopenmetaobject_p.h> #include <QtDeclarative/QDeclarativeView> static QHash<QByteArray, const QDeclarativeType *> qmlTypeByCppName; @@ -47,7 +50,11 @@ void processMetaObject(const QMetaObject *meta, QSet<const QMetaObject *> *metas if (! meta || metas->contains(meta)) return; - metas->insert(meta); + // dynamic meta objects break things badly + const QMetaObjectPrivate *mop = reinterpret_cast<const QMetaObjectPrivate *>(meta->d.data); + if (!(mop->flags & DynamicMetaObject)) + metas->insert(meta); + processMetaObject(meta->superClass(), metas); }