diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp index c3d0437bf6a..6bd10a2e0b8 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp @@ -605,7 +605,33 @@ ObjectNodeInstance::Pointer ObjectNodeInstance::create(QObject *object) QObject *ObjectNodeInstance::createPrimitive(const QString &typeName, int majorNumber, int minorNumber, QQmlContext *context) { - return QmlPrivateGate::createPrimitive(typeName, majorNumber, minorNumber, context); + QObject *object = QmlPrivateGate::createPrimitive(typeName, majorNumber, minorNumber, context); + + /* Let's try to create the primitive from source, since with incomplete meta info this might be a pure + * QML type. This is the case for example if a C++ type is mocked up with a QML file. + */ + + if (!object) + object = createPrimitiveFromSource(typeName, majorNumber, minorNumber, context); + + return object; +} + +QObject *ObjectNodeInstance::createPrimitiveFromSource(const QString &typeName, int majorNumber, int minorNumber, QQmlContext *context) +{ + if (typeName.isEmpty()) + return 0; + + QStringList parts = typeName.split("/"); + const QString unqualifiedTypeName = parts.last(); + parts.removeLast(); + + if (parts.isEmpty()) + return 0; + + const QString importString = parts.join(".") + " " + QString::number(majorNumber) + "." + QString::number(minorNumber); + QString source = "import " + importString + "\n" + unqualifiedTypeName + " {\n" + "}\n"; + return createCustomParserObject(source, "", context); } QObject *ObjectNodeInstance::createComponentWrap(const QString &nodeSource, const QByteArray &importCode, QQmlContext *context) diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h index cecc9c8ee3c..8266f0addf8 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h @@ -67,6 +67,7 @@ public: static Pointer create(QObject *objectToBeWrapped); static QObject *createPrimitive(const QString &typeName, int majorNumber, int minorNumber, QQmlContext *context); + static QObject *createPrimitiveFromSource(const QString &typeName, int majorNumber, int minorNumber, QQmlContext *context); static QObject *createCustomParserObject(const QString &nodeSource, const QByteArray &importCode, QQmlContext *context); static QObject *createComponent(const QString &componentPath, QQmlContext *context); static QObject *createComponent(const QUrl &componentUrl, QQmlContext *context);