]> git.cworth.org Git - apitrace/blobdiff - thirdparty/qjson/qobjecthelper.cpp
Update bundled QJson
[apitrace] / thirdparty / qjson / qobjecthelper.cpp
index 8bba181b706774dc2b23d0bf56c0db3df3ddfdbe..b756488f07773dbe0fe2b7859a68c07ab1d4cdcc 100644 (file)
@@ -4,16 +4,16 @@
   * Copyright (C) 2009 Flavio Castelli <flavio@castelli.name>
   *
   * 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; i<count; ++i) {
-    QMetaProperty metaproperty = metaobject->property(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 );
     }
   }
 }