--- a/src/corelib/animation/qpropertyanimation.cpp	2012-11-23 18:09:55.000000000 +0800
+++ b/src/corelib/animation/qpropertyanimation.cpp	2013-02-21 03:31:27.740007646 +0800
@@ -135,8 +135,11 @@
 
     if (newValue.userType() == propertyType) {
         //no conversion is needed, we directly call the QMetaObject::metacall
-        void *data = const_cast<void*>(newValue.constData());
-        QMetaObject::metacall(targetValue, QMetaObject::WriteProperty, propertyIndex, &data);
+        //check QMetaProperty::write for an explanation of these
+		int status = -1;
+		int flags = 0;
+		void *argv[] = { const_cast<void *>(newValue.constData()), const_cast<QVariant *>(&newValue), &status, &flags };
+		QMetaObject::metacall(targetValue, QMetaObject::WriteProperty, propertyIndex, argv);
     } else {
         targetValue->setProperty(propertyName.constData(), newValue);
     }
