From 75af24a2d121ab56c5b60524bf1d7f2af1613025 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Sat, 23 May 2015 14:04:09 +0200 Subject: QMetaType: Do not automatically register types that derives from a Q_GADGET Otherwise the type is registered with the wrong name Change-Id: I68ec3a05e2528816626e648b46ccc9d70b004866 Reviewed-by: Simon Hausmann --- src/corelib/kernel/qmetatype.h | 12 ++++++++---- src/corelib/kernel/qobjectdefs.h | 1 + 2 files changed, 9 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h index b854dc16fd..9ad8702e79 100644 --- a/src/corelib/kernel/qmetatype.h +++ b/src/corelib/kernel/qmetatype.h @@ -1357,12 +1357,16 @@ namespace QtPrivate enum { Value = sizeof(checkType(static_cast(0))) == sizeof(yes_type) }; }; + template + struct IsGadgetHelper { enum { Value = false }; }; + template - struct IsGadgetHelper + struct IsGadgetHelper { - template static typename X::QtGadgetHelper *checkType(X*); - static char checkType(void*); - enum { Value = sizeof(checkType(static_cast(0))) == sizeof(void*) }; + template + static char checkType(void (X::*)()); + static void *checkType(void (T::*)()); + enum { Value = sizeof(checkType(&T::qt_check_for_QGADGET_macro)) == sizeof(void *) }; }; diff --git a/src/corelib/kernel/qobjectdefs.h b/src/corelib/kernel/qobjectdefs.h index 31e8a670e9..4d01264906 100644 --- a/src/corelib/kernel/qobjectdefs.h +++ b/src/corelib/kernel/qobjectdefs.h @@ -172,6 +172,7 @@ private: \ #define Q_GADGET \ public: \ static const QMetaObject staticMetaObject; \ + void qt_check_for_QGADGET_macro(); \ typedef void QtGadgetHelper; \ private: \ Q_DECL_HIDDEN_STATIC_METACALL static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **); -- cgit v1.2.3