diff options
-rw-r--r-- | src/corelib/kernel/qvariant.h | 4 | ||||
-rw-r--r-- | tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp | 1 |
2 files changed, 4 insertions, 1 deletions
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<T>(QMetaType::typeFlags(v.userType()) & QMetaType::PointerToQObject ? v.d.data.o : 0); + return qobject_cast<T>(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<QObject*>(), object); v.convert(qMetaTypeId<QObject*>()); QCOMPARE(v.value<QObject*>(), object); |