From 80a92d55d3afcc455882d81185f9de6f35687a00 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Fri, 25 Jan 2019 15:40:56 +0100 Subject: QmlDesigner: Fix gradients in Qt 5.12.1 In Qt 5.12.1 gradient is a QJSValue. See commit 1771d298f33543a3fe47decfe0fff10609b01ab1 This patch adds QJSValue support. Change-Id: I1c37b82bf033c38646564d5453e297258dd4b056 Reviewed-by: Tim Jenssen --- .../qml2puppet/instances/objectnodeinstance.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp index 7af165a9c6..3720bdc90a 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp @@ -44,6 +44,7 @@ #include #include #include +#include static bool isSimpleExpression(const QString &expression) { @@ -264,11 +265,17 @@ static bool isList(const QQmlProperty &property) return property.propertyTypeCategory() == QQmlProperty::List; } +static bool isQJSValue(const QQmlProperty &property) +{ + return !strcmp(property.propertyTypeName(), "QJSValue"); +} + static bool isObject(const QQmlProperty &property) { - return (property.propertyTypeCategory() == QQmlProperty::Object) || - //QVariant can also store QObjects. Lets trust our model. - (QLatin1String(property.propertyTypeName()) == QLatin1String("QVariant")); + /* QVariant and QJSValue can also store QObjects. Lets trust our model. */ + return (property.propertyTypeCategory() == QQmlProperty::Object + || !strcmp(property.propertyTypeName(), "QVariant") + || isQJSValue(property)); } static QVariant objectToVariant(QObject *object) @@ -337,7 +344,10 @@ void ObjectNodeInstance::addToNewProperty(QObject *object, QObject *newParent, c list.append(object); } else if (isObject(property)) { - property.write(objectToVariant(object)); + if (isQJSValue(property)) /* In this case we have to explcitly generate and convert a QJSValue */ + property.write(QVariant::fromValue(engine()->newQObject(object))); + else + property.write(objectToVariant(object)); if (QQuickItem *item = qobject_cast(object)) if (QQuickItem *newParentItem = qobject_cast(newParent)) -- cgit v1.2.1