From 3ad7742b28001310d219bca3c9c6fec587dcd557 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Fri, 31 Oct 2014 22:38:56 +0100 Subject: Fix QMetaType::metaObjectForType for QtGui and QtWidgets types Follow the same convention as other functions using the QMetaTypeSwitcher It was not a problem since none of the built-ins type in QtWidgets or QtGui were pointer and could not have a QMetaObject. But since we want to register the metaobject for Q_GADGET, it would fail compilation as types like QFont are not defined in QtCore. Change-Id: I6307bf6f25439ed48355ef7ecfa60575de318a25 Reviewed-by: Simon Hausmann --- src/corelib/kernel/qmetatype.cpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp index 4540e96de6..63f181cdac 100644 --- a/src/corelib/kernel/qmetatype.cpp +++ b/src/corelib/kernel/qmetatype.cpp @@ -1982,8 +1982,27 @@ public: MetaObject(const int type) : m_type(type) {} + + template::IsAccepted> + struct MetaObjectImpl + { + static const QMetaObject *MetaObject(int /*type*/) + { return QtPrivate::MetaObjectForType::value(); } + }; template - const QMetaObject *delegate(const T*) { return QtPrivate::MetaObjectForType::value(); } + struct MetaObjectImpl + { + static const QMetaObject *MetaObject(int type) { + if (QModulesPrivate::QTypeModuleInfo::IsGui) + return Q_LIKELY(qMetaTypeGuiHelper) ? qMetaTypeGuiHelper[type - QMetaType::FirstGuiType].metaObject : 0; + if (QModulesPrivate::QTypeModuleInfo::IsWidget) + return Q_LIKELY(qMetaTypeWidgetsHelper) ? qMetaTypeWidgetsHelper[type - QMetaType::FirstWidgetsType].metaObject : 0; + return 0; + } + }; + + template + const QMetaObject *delegate(const T *) { return MetaObjectImpl::MetaObject(m_type); } const QMetaObject *delegate(const void*) { return 0; } const QMetaObject *delegate(const QMetaTypeSwitcher::UnknownType*) { return 0; } const QMetaObject *delegate(const QMetaTypeSwitcher::NotBuiltinType*) { return customMetaObject(m_type); } -- cgit v1.2.3