Remove QWidgetStar.
authorStephen Kelly <stephen.kelly@kdab.com>
Thu, 19 Jul 2012 12:33:28 +0000 (14:33 +0200)
committerQt by Nokia <qt-info@nokia.com>
Sat, 18 Aug 2012 08:55:47 +0000 (10:55 +0200)
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 <ogoffart@woboq.com>
dist/changes-5.0.0
src/corelib/kernel/qmetatype.cpp
src/corelib/kernel/qmetatype.h
src/corelib/kernel/qvariant.cpp
src/widgets/kernel/qwidgetsvariant.cpp
tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp
tests/auto/corelib/kernel/qmetatype/typeFlags.bin
tests/auto/widgets/kernel/qwidgetmetatype/tst_qwidgetmetatype.cpp
tests/auto/widgets/kernel/qwidgetsvariant/tst_qwidgetsvariant.cpp

index e40c7c7..9a9c0ec 100644 (file)
@@ -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<QWidget*>()
+    or QVariant::canConvert<QWidget*>() as appropriate.
 
 - QMetaMethod:
   * QMetaMethod::signature() has been renamed to QMetaMethod::methodSignature(),
index 18b17d9..080dbd7 100644 (file)
@@ -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:
index 7c32ce7..a40bd77 100644 (file)
@@ -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<QWidget*>
-    {
-        enum { Value = true };
-    };
 
     template<typename T>
     struct IsPointerToTypeDerivedFromQObject<T*>
@@ -480,14 +474,6 @@ namespace QtPrivate
         static inline const QMetaObject *value() { return &T::staticMetaObject; }
     };
 
-    Q_CORE_EXPORT const QMetaObject *metaObjectForQWidget();
-
-    template<>
-    struct MetaObjectForType<QWidget*, /* isPointerToTypeDerivedFromQObject = */ true>
-    {
-        static const QMetaObject *value() { return metaObjectForQWidget(); }
-    };
-
     template<typename T>
     struct IsSharedPointerToTypeDerivedFromQObject
     {
index 4b582af..8c38259 100644 (file)
@@ -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:
index 0e4d44b..bc1112c 100644 (file)
@@ -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<QWidget*>();
     qMetaTypeWidgetsHelper = qVariantWidgetsHelper;
-    qMetaObjectWidgetsHelper = &QWidget::staticMetaObject;
     QVariantPrivate::registerHandler(QModulesPrivate::Widgets, &widgets_handler);
 }
 Q_CONSTRUCTOR_FUNCTION(qRegisterWidgetsVariant)
index b251761..1d559af 100644 (file)
@@ -498,9 +498,6 @@ template<> struct TestValueFactory<QMetaType::Float> {
 template<> struct TestValueFactory<QMetaType::QObjectStar> {
     static QObject * *create() { return new QObject *(0); }
 };
-template<> struct TestValueFactory<QMetaType::QWidgetStar> {
-    static QWidget * *create() { return new QWidget *(0); }
-};
 template<> struct TestValueFactory<QMetaType::VoidStar> {
     static void * *create() { return new void *(0); }
 };
index cf83e94..dee0983 100644 (file)
Binary files a/tests/auto/corelib/kernel/qmetatype/typeFlags.bin and b/tests/auto/corelib/kernel/qmetatype/typeFlags.bin differ
index f92a4fd..fbfa018 100644 (file)
@@ -68,14 +68,14 @@ public:
 };
 
 Q_STATIC_ASSERT(( QMetaTypeId2<QSizePolicy>::IsBuiltIn));
-Q_STATIC_ASSERT(( QMetaTypeId2<QWidget*>::IsBuiltIn));
+Q_STATIC_ASSERT((!QMetaTypeId2<QWidget*>::IsBuiltIn));
 Q_STATIC_ASSERT((!QMetaTypeId2<QList<QSizePolicy> >::IsBuiltIn));
 Q_STATIC_ASSERT((!QMetaTypeId2<QMap<QString,QSizePolicy> >::IsBuiltIn));
 
 
 void tst_QWidgetMetaType::metaObject()
 {
-    QCOMPARE(QMetaType::metaObjectForType(QMetaType::QWidgetStar), &QWidget::staticMetaObject);
+    QCOMPARE(QMetaType::metaObjectForType(qMetaTypeId<QWidget*>()), &QWidget::staticMetaObject);
     QCOMPARE(QMetaType::metaObjectForType(qMetaTypeId<QLabel*>()), &QLabel::staticMetaObject);
     QCOMPARE(QMetaType::metaObjectForType(qMetaTypeId<CustomWidget*>()), &CustomWidget::staticMetaObject);
 }
index 90238b5..a5e33c4 100644 (file)
@@ -198,11 +198,10 @@ void tst_QWidgetsVariant::qvariant_cast_QObject()
         QCOMPARE(data.userType(), int(QMetaType::QObjectStar));
 
         QVERIFY(data.canConvert<QWidget*>());
-        QVERIFY(data.canConvert(QMetaType::QWidgetStar));
         QVERIFY(data.canConvert(::qMetaTypeId<QWidget*>()));
         QVERIFY(data.value<QWidget*>());
-        QVERIFY(data.convert(QMetaType::QWidgetStar));
-        QCOMPARE(data.userType(), int(QMetaType::QWidgetStar));
+        QVERIFY(data.convert(qMetaTypeId<QWidget*>()));
+        QCOMPARE(data.userType(), qMetaTypeId<QWidget*>());
     } else {
         QVERIFY(!data.canConvert<QObject*>());
         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<QWidget*>());
 
     QCOMPARE(data.value<QObject*>(), widget);
     QCOMPARE(data.value<QWidget*>(), widget);