diff --git a/src/corelib/kernel/qvariant.h b/src/corelib/kernel/qvariant.h index d5ea491288..3345131c0f 100644 --- a/src/corelib/kernel/qvariant.h +++ b/src/corelib/kernel/qvariant.h @@ -756,7 +756,9 @@ namespace QtPrivate { #ifndef QT_NO_QOBJECT static T object(const QVariant &v) { - return qobject_cast(QMetaType::typeFlags(v.userType()) & QMetaType::PointerToQObject ? v.d.data.o : 0); + return qobject_cast(QMetaType::typeFlags(v.userType()) & QMetaType::PointerToQObject + ? v.d.data.o + : QVariantValueHelper::metaType(v)); } #endif }; diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp index 39b16200df..6baf6c4310 100644 --- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp +++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp @@ -2266,6 +2266,7 @@ void tst_QVariant::qvariant_cast_QObject_wrapper() CustomQObjectDerived *object = new CustomQObjectDerived(this); QObjectWrapper wrapper(object); QVariant v = QVariant::fromValue(wrapper); + QCOMPARE(v.value(), object); v.convert(qMetaTypeId()); QCOMPARE(v.value(), object);