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 <ogoffart@woboq.com>
This commit is contained in:
Stephen Kelly 2012-07-19 14:33:28 +02:00 committed by Qt by Nokia
parent 33b2984271
commit 4d9d88af6f
9 changed files with 12 additions and 34 deletions

2
dist/changes-5.0.0 vendored
View 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(),

View 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:

View 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
{

View 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:

View 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)

View 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); }
};

View 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);
}

View 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);