X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=thirdparty%2Fqjson%2Fqobjecthelper.cpp;fp=thirdparty%2Fqjson%2Fqobjecthelper.cpp;h=b756488f07773dbe0fe2b7859a68c07ab1d4cdcc;hb=0094c61568bff9f9dd7bafb711f111698e683831;hp=8bba181b706774dc2b23d0bf56c0db3df3ddfdbe;hpb=c391265484ecb3baa2a00c80658c99ad65963ec6;p=apitrace diff --git a/thirdparty/qjson/qobjecthelper.cpp b/thirdparty/qjson/qobjecthelper.cpp index 8bba181..b756488 100644 --- a/thirdparty/qjson/qobjecthelper.cpp +++ b/thirdparty/qjson/qobjecthelper.cpp @@ -4,16 +4,16 @@ * Copyright (C) 2009 Flavio Castelli * * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. + * Lesser General Public License for more details. * - * You should have received a copy of the GNU Library General Public License + * You should have received a copy of the GNU Lesser General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. @@ -62,20 +62,24 @@ QVariantMap QObjectHelper::qobject2qvariant( const QObject* object, void QObjectHelper::qvariant2qobject(const QVariantMap& variant, QObject* object) { - QStringList properies; const QMetaObject *metaobject = object->metaObject(); - int count = metaobject->propertyCount(); - for (int i=0; iproperty(i); - if (metaproperty.isWritable()) { - properies << QLatin1String( metaproperty.name()); - } - } QVariantMap::const_iterator iter; - for (iter = variant.constBegin(); iter != variant.end(); iter++) { - if (properies.contains(iter.key())) { - object->setProperty(iter.key().toAscii(), iter.value()); + for (iter = variant.constBegin(); iter != variant.constEnd(); ++iter) { + int pIdx = metaobject->indexOfProperty( iter.key().toAscii() ); + + if ( pIdx < 0 ) { + continue; + } + + QMetaProperty metaproperty = metaobject->property( pIdx ); + QVariant::Type type = metaproperty.type(); + QVariant v( iter.value() ); + if ( v.canConvert( type ) ) { + v.convert( type ); + metaproperty.write( object, v ); + } else if (QString(QLatin1String("QVariant")).compare(QLatin1String(metaproperty.typeName())) == 0) { + metaproperty.write( object, v ); } } }