From 4d9d88af6ff494f09cfbc376a1f9aa0ea9ca2357 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Thu, 19 Jul 2012 14:33:28 +0200 Subject: [PATCH] Remove QWidgetStar. This allows us to remove the odd hacks to get the static metaobject for the QWidget* metatype. The QWidget* is still an automatic metatype thanks to the QObject partial template specialization. It is registered as a metatype at runtime automatically in qwidgetsvariant.cpp. Change-Id: Ie01b69eadf2cbe87af1a86c3284550f60dcf9e94 Reviewed-by: Olivier Goffart --- dist/changes-5.0.0 | 2 ++ src/corelib/kernel/qmetatype.cpp | 5 +---- src/corelib/kernel/qmetatype.h | 18 ++---------------- src/corelib/kernel/qvariant.cpp | 4 +--- src/widgets/kernel/qwidgetsvariant.cpp | 3 +-- .../kernel/qmetatype/tst_qmetatype.cpp | 3 --- .../corelib/kernel/qmetatype/typeFlags.bin | Bin 146 -> 144 bytes .../qwidgetmetatype/tst_qwidgetmetatype.cpp | 4 ++-- .../qwidgetsvariant/tst_qwidgetsvariant.cpp | 7 +++---- 9 files changed, 12 insertions(+), 34 deletions(-) diff --git a/dist/changes-5.0.0 b/dist/changes-5.0.0 index e40c7c70ab0..9a9c0ec4e22 100644 --- a/dist/changes-5.0.0 +++ b/dist/changes-5.0.0 @@ -62,6 +62,8 @@ information about a particular change. - QMetaType: * QMetaType::construct() has been renamed to QMetaType::create(). * QMetaType::unregisterType() has been removed. + * QMetaType::QWidgetStar has been removed. Use qMetaTypeId() + or QVariant::canConvert() as appropriate. - QMetaMethod: * QMetaMethod::signature() has been renamed to QMetaMethod::methodSignature(), diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp index 18b17d9aea6..080dbd718a4 100644 --- a/src/corelib/kernel/qmetatype.cpp +++ b/src/corelib/kernel/qmetatype.cpp @@ -165,7 +165,6 @@ struct DefinedTypesFilter { \value UChar \c{unsigned char} \value Float \c float \value QObjectStar QObject * - \value QWidgetStar QWidget * \value QVariant QVariant \value QCursor QCursor @@ -604,7 +603,7 @@ int QMetaType::registerNormalizedTypedef(const NS(QByteArray) &normalizedTypeNam bool QMetaType::isRegistered(int type) { // predefined type - if ((type >= FirstCoreType && type <= LastCoreType) + if ((type >= FirstCoreType && type <= LastCoreType && type != 40) // 40 is the type that QWidgetStar used to be || (type >= FirstGuiType && type <= LastGuiType) || (type >= FirstWidgetsType && type <= LastWidgetsType)) { return true; @@ -693,7 +692,6 @@ bool QMetaType::save(QDataStream &stream, int type, const void *data) case QMetaType::Void: case QMetaType::VoidStar: case QMetaType::QObjectStar: - case QMetaType::QWidgetStar: case QMetaType::QModelIndex: case QMetaType::QJsonValue: case QMetaType::QJsonObject: @@ -911,7 +909,6 @@ bool QMetaType::load(QDataStream &stream, int type, void *data) case QMetaType::Void: case QMetaType::VoidStar: case QMetaType::QObjectStar: - case QMetaType::QWidgetStar: case QMetaType::QModelIndex: case QMetaType::QJsonValue: case QMetaType::QJsonObject: diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h index 7c32ce744e0..a40bd77e5af 100644 --- a/src/corelib/kernel/qmetatype.h +++ b/src/corelib/kernel/qmetatype.h @@ -113,8 +113,7 @@ QT_BEGIN_NAMESPACE F(QJsonDocument, 48, QJsonDocument) \ #define QT_FOR_EACH_STATIC_CORE_POINTER(F)\ - F(QObjectStar, 39, QObject*) \ - F(QWidgetStar, 40, QWidget*) \ + F(QObjectStar, 39, QObject*) #define QT_FOR_EACH_STATIC_CORE_TEMPLATE(F)\ F(QVariantMap, 8, QVariantMap) \ @@ -233,7 +232,7 @@ public: QRegularExpression = 44, QJsonValue = 45, QJsonObject = 46, QJsonArray = 47, QJsonDocument = 48, SChar = 49, - QObjectStar = 39, QWidgetStar = 40, + QObjectStar = 39, Void = 43, QVariantMap = 8, QVariantList = 9, QVariantHash = 28, QFont = 64, QPixmap = 65, QBrush = 66, QColor = 67, QPalette = 68, @@ -448,11 +447,6 @@ namespace QtPrivate { enum { Value = true }; }; - template<> - struct IsPointerToTypeDerivedFromQObject - { - enum { Value = true }; - }; template struct IsPointerToTypeDerivedFromQObject @@ -480,14 +474,6 @@ namespace QtPrivate static inline const QMetaObject *value() { return &T::staticMetaObject; } }; - Q_CORE_EXPORT const QMetaObject *metaObjectForQWidget(); - - template<> - struct MetaObjectForType - { - static const QMetaObject *value() { return metaObjectForQWidget(); } - }; - template struct IsSharedPointerToTypeDerivedFromQObject { diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp index 4b582affb30..8c382592769 100644 --- a/src/corelib/kernel/qvariant.cpp +++ b/src/corelib/kernel/qvariant.cpp @@ -1074,8 +1074,7 @@ Q_CORE_EXPORT void QVariantPrivate::registerHandler(const int /* Modules::Names Usually, you never have to use this constructor, use QVariant::fromValue() instead to construct variants from the pointer types represented by - \c QMetaType::VoidStar, \c QMetaType::QObjectStar and - \c QMetaType::QWidgetStar. + \c QMetaType::VoidStar, and \c QMetaType::QObjectStar. \sa QVariant::fromValue(), Type */ @@ -2724,7 +2723,6 @@ bool QVariant::canConvert(int targetTypeId) const case QMetaType::Short: case QMetaType::UShort: return qCanConvertMatrix[QVariant::Int] & (1 << currentType) || currentType == QVariant::Int; - case QMetaType::QWidgetStar: case QMetaType::QObjectStar: return canConvertMetaObject(currentType, targetTypeId, d.data.o); default: diff --git a/src/widgets/kernel/qwidgetsvariant.cpp b/src/widgets/kernel/qwidgetsvariant.cpp index 0e4d44bc970..bc1112c9aa5 100644 --- a/src/widgets/kernel/qwidgetsvariant.cpp +++ b/src/widgets/kernel/qwidgetsvariant.cpp @@ -152,12 +152,11 @@ static const QMetaTypeInterface qVariantWidgetsHelper[] = { } // namespace extern Q_CORE_EXPORT const QMetaTypeInterface *qMetaTypeWidgetsHelper; -extern Q_CORE_EXPORT const QMetaObject *qMetaObjectWidgetsHelper; void qRegisterWidgetsVariant() { + qRegisterMetaType(); qMetaTypeWidgetsHelper = qVariantWidgetsHelper; - qMetaObjectWidgetsHelper = &QWidget::staticMetaObject; QVariantPrivate::registerHandler(QModulesPrivate::Widgets, &widgets_handler); } Q_CONSTRUCTOR_FUNCTION(qRegisterWidgetsVariant) diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp index b2517614154..1d559af22c6 100644 --- a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp +++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp @@ -498,9 +498,6 @@ template<> struct TestValueFactory { template<> struct TestValueFactory { static QObject * *create() { return new QObject *(0); } }; -template<> struct TestValueFactory { - static QWidget * *create() { return new QWidget *(0); } -}; template<> struct TestValueFactory { static void * *create() { return new void *(0); } }; diff --git a/tests/auto/corelib/kernel/qmetatype/typeFlags.bin b/tests/auto/corelib/kernel/qmetatype/typeFlags.bin index cf83e9419e4ed32150f7522cae456d720d8e3a02..dee0983775f08f04f47aca81e4fa0d2f6f8aeaca 100644 GIT binary patch delta 9 QcmbQlIDv73-^2hX01w6kCIA2c delta 11 ScmbQhIEitBAEU-ZUuOUmXah|E diff --git a/tests/auto/widgets/kernel/qwidgetmetatype/tst_qwidgetmetatype.cpp b/tests/auto/widgets/kernel/qwidgetmetatype/tst_qwidgetmetatype.cpp index f92a4fd5cd4..fbfa018cefc 100644 --- a/tests/auto/widgets/kernel/qwidgetmetatype/tst_qwidgetmetatype.cpp +++ b/tests/auto/widgets/kernel/qwidgetmetatype/tst_qwidgetmetatype.cpp @@ -68,14 +68,14 @@ public: }; Q_STATIC_ASSERT(( QMetaTypeId2::IsBuiltIn)); -Q_STATIC_ASSERT(( QMetaTypeId2::IsBuiltIn)); +Q_STATIC_ASSERT((!QMetaTypeId2::IsBuiltIn)); Q_STATIC_ASSERT((!QMetaTypeId2 >::IsBuiltIn)); Q_STATIC_ASSERT((!QMetaTypeId2 >::IsBuiltIn)); void tst_QWidgetMetaType::metaObject() { - QCOMPARE(QMetaType::metaObjectForType(QMetaType::QWidgetStar), &QWidget::staticMetaObject); + QCOMPARE(QMetaType::metaObjectForType(qMetaTypeId()), &QWidget::staticMetaObject); QCOMPARE(QMetaType::metaObjectForType(qMetaTypeId()), &QLabel::staticMetaObject); QCOMPARE(QMetaType::metaObjectForType(qMetaTypeId()), &CustomWidget::staticMetaObject); } diff --git a/tests/auto/widgets/kernel/qwidgetsvariant/tst_qwidgetsvariant.cpp b/tests/auto/widgets/kernel/qwidgetsvariant/tst_qwidgetsvariant.cpp index 90238b5d9bb..a5e33c41c97 100644 --- a/tests/auto/widgets/kernel/qwidgetsvariant/tst_qwidgetsvariant.cpp +++ b/tests/auto/widgets/kernel/qwidgetsvariant/tst_qwidgetsvariant.cpp @@ -198,11 +198,10 @@ void tst_QWidgetsVariant::qvariant_cast_QObject() QCOMPARE(data.userType(), int(QMetaType::QObjectStar)); QVERIFY(data.canConvert()); - QVERIFY(data.canConvert(QMetaType::QWidgetStar)); QVERIFY(data.canConvert(::qMetaTypeId())); QVERIFY(data.value()); - QVERIFY(data.convert(QMetaType::QWidgetStar)); - QCOMPARE(data.userType(), int(QMetaType::QWidgetStar)); + QVERIFY(data.convert(qMetaTypeId())); + QCOMPARE(data.userType(), qMetaTypeId()); } else { QVERIFY(!data.canConvert()); QVERIFY(!data.canConvert(QMetaType::QObjectStar)); @@ -219,7 +218,7 @@ void tst_QWidgetsVariant::qvariant_cast_QObject_derived() CustomQWidget customWidget; QWidget *widget = &customWidget; QVariant data = QVariant::fromValue(widget); - QVERIFY(data.userType() == QMetaType::QWidgetStar); + QVERIFY(data.userType() == qMetaTypeId()); QCOMPARE(data.value(), widget); QCOMPARE(data.value(), widget);