summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/kernel/qvariant.h4
-rw-r--r--tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp1
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);