From f69ace734178eaaef6b4689879923f9f916466bb Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Thu, 5 Sep 2013 11:13:26 +0200 Subject: [PATCH] QVariant: Make it possible to extract a QObject* from a wrapper without conversion. Change-Id: I3a054d87d12e08d72dd4c77b6d467dc63f9a2231 Reviewed-by: Olivier Goffart --- src/corelib/kernel/qvariant.h | 4 +++- tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) 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);