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 <simon.hausmann@theqtcompany.com>bb10
parent
d0b1c646b4
commit
75af24a2d1
|
|
@ -1357,12 +1357,16 @@ namespace QtPrivate
|
|||
enum { Value = sizeof(checkType(static_cast<T*>(0))) == sizeof(yes_type) };
|
||||
};
|
||||
|
||||
template<typename T, typename Enable = void>
|
||||
struct IsGadgetHelper { enum { Value = false }; };
|
||||
|
||||
template<typename T>
|
||||
struct IsGadgetHelper
|
||||
struct IsGadgetHelper<T, typename T::QtGadgetHelper>
|
||||
{
|
||||
template<typename X> static typename X::QtGadgetHelper *checkType(X*);
|
||||
static char checkType(void*);
|
||||
enum { Value = sizeof(checkType(static_cast<T*>(0))) == sizeof(void*) };
|
||||
template <typename X>
|
||||
static char checkType(void (X::*)());
|
||||
static void *checkType(void (T::*)());
|
||||
enum { Value = sizeof(checkType(&T::qt_check_for_QGADGET_macro)) == sizeof(void *) };
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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 **);
|
||||
|
|
|
|||
|
|
@ -144,6 +144,7 @@ class CustomGadget {
|
|||
};
|
||||
|
||||
class CustomNonQObject {};
|
||||
class GadgetDerived : public CustomGadget {};
|
||||
|
||||
void tst_QMetaType::defined()
|
||||
{
|
||||
|
|
@ -153,6 +154,7 @@ void tst_QMetaType::defined()
|
|||
QCOMPARE(int(QMetaTypeId2<int*>::Defined), 0);
|
||||
QCOMPARE(int(QMetaTypeId2<CustomQObject::CustomQEnum>::Defined), 1);
|
||||
QCOMPARE(int(QMetaTypeId2<CustomGadget>::Defined), 1);
|
||||
QVERIFY(!QMetaTypeId2<GadgetDerived>::Defined);
|
||||
QVERIFY(int(QMetaTypeId2<CustomQObject*>::Defined));
|
||||
QVERIFY(!QMetaTypeId2<CustomQObject>::Defined);
|
||||
QVERIFY(!QMetaTypeId2<CustomNonQObject>::Defined);
|
||||
|
|
|
|||
Loading…
Reference in New Issue