forked from qt-creator/qt-creator
QmlDesigner: Fallback to create types from source
We fallback to create types from source, if other means failed. This can be required if the meta info is incomplete/incorrect when a C++ type is mocked. Change-Id: I50d45a6f9d7eba3483da10d9e1d7d6644d9aeb96 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
committed by
Thomas Hartmann
parent
457cfcfae9
commit
f952c3ee4a
@@ -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)
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user