- 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 );