diff --git a/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp index 0d5d808277f2cbdc636ae6e2a3c4c0cf5bd4198b..ad91a111b14dc785ed0b3e15fdb1c0dbc7129576 100644 --- a/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp @@ -31,9 +31,11 @@ #include "bindingproperty.h" #include "filemanager/firstdefinitionfinder.h" #include "filemanager/objectlengthcalculator.h" +#include "metainfo.h" #include "nodemetainfo.h" #include "nodeproperty.h" #include "propertymetainfo.h" +#include "propertyparser.h" #include "textmodifier.h" #include "texttomodelmerger.h" #include "rewriterview.h" @@ -628,27 +630,23 @@ QVariant TextToModelMerger::convertToVariant(const ModelNode &node, const QString &astType) { const QString cleanedValue = stripQuotes(astValue.trimmed()); + const NodeMetaInfo nodeMetaInfo = node.metaInfo(); if (!astType.isEmpty()) { const int type = propertyType(astType); QVariant value(cleanedValue); value.convert(static_cast<QVariant::Type>(type)); return value; - } - const NodeMetaInfo nodeMetaInfo = node.metaInfo(); + const QString typeName = QMetaType::typeName(type); + return Internal::PropertyParser::read(typeName, astValue, nodeMetaInfo.metaInfo()); + } if (nodeMetaInfo.isValid()) { const PropertyMetaInfo propertyMetaInfo = nodeMetaInfo.property(astName, true); if (propertyMetaInfo.isValid()) { - QVariant castedValue = propertyMetaInfo.castedValue(cleanedValue); - if (!castedValue.isValid()) - qWarning() << "Casting the value" << cleanedValue - << "of property" << astName - << "to the property type" << propertyMetaInfo.type() - << "failed"; - return castedValue; + return Internal::PropertyParser::read(propertyMetaInfo.type(), cleanedValue, nodeMetaInfo.metaInfo()); } else if (node.type() == QLatin1String("Qt/PropertyChanges")) { // In the future, we should do the type resolving in a second pass, or delay setting properties until the full file has been parsed. return QVariant(cleanedValue);