QRegularExpression: QMetaType and QVariant support
Removed the Q_DECLARE_METATYPE in favour of first-class support inside QMetaType and QVariant. Change-Id: I904236822bfab967dc0fbd4d4cc2bcb68c741adc Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com> Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
This commit is contained in:
parent
b8112c8526
commit
08790636f2
@ -63,6 +63,7 @@
|
||||
# include "qurl.h"
|
||||
# include "qvariant.h"
|
||||
# include "qabstractitemmodel.h"
|
||||
# include "qregularexpression.h"
|
||||
#endif
|
||||
|
||||
#ifndef QT_NO_GEOM_VARIANT
|
||||
@ -114,6 +115,9 @@ template<> struct TypeDefinition<QModelIndex> { static const bool IsAvailable =
|
||||
#ifdef QT_NO_REGEXP
|
||||
template<> struct TypeDefinition<QRegExp> { static const bool IsAvailable = false; };
|
||||
#endif
|
||||
#if defined(QT_BOOTSTRAPPED) || defined(QT_NO_REGEXP)
|
||||
template<> struct TypeDefinition<QRegularExpression> { static const bool IsAvailable = false; };
|
||||
#endif
|
||||
} // namespace
|
||||
|
||||
/*!
|
||||
@ -219,6 +223,7 @@ template<> struct TypeDefinition<QRegExp> { static const bool IsAvailable = fals
|
||||
\value QPoint QPoint
|
||||
\value QUrl QUrl
|
||||
\value QRegExp QRegExp
|
||||
\value QRegularExpression QRegularExpression
|
||||
\value QDateTime QDateTime
|
||||
\value QPointF QPointF
|
||||
\value QPalette QPalette
|
||||
@ -781,10 +786,15 @@ bool QMetaType::save(QDataStream &stream, int type, const void *data)
|
||||
break;
|
||||
#endif
|
||||
#ifndef QT_BOOTSTRAPPED
|
||||
#ifndef QT_NO_REGEXP
|
||||
case QMetaType::QRegularExpression:
|
||||
stream << *static_cast<const NS(QRegularExpression)*>(data);
|
||||
break;
|
||||
#endif // QT_NO_REGEXP
|
||||
case QMetaType::QEasingCurve:
|
||||
stream << *static_cast<const NS(QEasingCurve)*>(data);
|
||||
break;
|
||||
#endif
|
||||
#endif // QT_BOOTSTRAPPED
|
||||
case QMetaType::QFont:
|
||||
case QMetaType::QPixmap:
|
||||
case QMetaType::QBrush:
|
||||
@ -993,10 +1003,15 @@ bool QMetaType::load(QDataStream &stream, int type, void *data)
|
||||
break;
|
||||
#endif
|
||||
#ifndef QT_BOOTSTRAPPED
|
||||
#ifndef QT_NO_REGEXP
|
||||
case QMetaType::QRegularExpression:
|
||||
stream >> *static_cast< NS(QRegularExpression)*>(data);
|
||||
break;
|
||||
#endif // QT_NO_REGEXP
|
||||
case QMetaType::QEasingCurve:
|
||||
stream >> *static_cast< NS(QEasingCurve)*>(data);
|
||||
break;
|
||||
#endif
|
||||
#endif // QT_BOOTSTRAPPED
|
||||
case QMetaType::QFont:
|
||||
case QMetaType::QPixmap:
|
||||
case QMetaType::QBrush:
|
||||
@ -1149,9 +1164,13 @@ void *QMetaType::create(int type, const void *copy)
|
||||
return new NS(QRegExp)(*static_cast<const NS(QRegExp)*>(copy));
|
||||
#endif
|
||||
#ifndef QT_BOOTSTRAPPED
|
||||
#ifndef QT_NO_REGEXP
|
||||
case QMetaType::QRegularExpression:
|
||||
return new NS(QRegularExpression)(*static_cast<const NS(QRegularExpression)*>(copy));
|
||||
#endif // QT_NO_REGEXP
|
||||
case QMetaType::QEasingCurve:
|
||||
return new NS(QEasingCurve)(*static_cast<const NS(QEasingCurve)*>(copy));
|
||||
#endif
|
||||
#endif // QT_BOOTSTRAPPED
|
||||
case QMetaType::QUuid:
|
||||
return new NS(QUuid)(*static_cast<const NS(QUuid)*>(copy));
|
||||
#ifndef QT_BOOTSTRAPPED
|
||||
@ -1253,9 +1272,13 @@ void *QMetaType::create(int type, const void *copy)
|
||||
return new NS(QRegExp);
|
||||
#endif
|
||||
#ifndef QT_BOOTSTRAPPED
|
||||
#ifndef QT_NO_REGEXP
|
||||
case QMetaType::QRegularExpression:
|
||||
return new NS(QRegularExpression);
|
||||
#endif // QT_NO_REGEXP
|
||||
case QMetaType::QEasingCurve:
|
||||
return new NS(QEasingCurve);
|
||||
#endif
|
||||
#endif // QT_BOOTSTRAPPED
|
||||
case QMetaType::QUuid:
|
||||
return new NS(QUuid);
|
||||
#ifndef QT_BOOTSTRAPPED
|
||||
|
@ -102,6 +102,7 @@ QT_BEGIN_NAMESPACE
|
||||
F(QUuid, 30, QUuid) \
|
||||
F(QVariant, 41, QVariant) \
|
||||
F(QModelIndex, 42, QModelIndex) \
|
||||
F(QRegularExpression, 44, QRegularExpression)
|
||||
|
||||
#define QT_FOR_EACH_STATIC_CORE_POINTER(F)\
|
||||
F(QObjectStar, 39, QObject*) \
|
||||
@ -194,7 +195,7 @@ public:
|
||||
QT_FOR_EACH_STATIC_TYPE(QT_DEFINE_METATYPE_ID)
|
||||
|
||||
FirstCoreType = Bool,
|
||||
LastCoreType = Void,
|
||||
LastCoreType = QRegularExpression,
|
||||
FirstGuiType = QFont,
|
||||
LastGuiType = QPolygonF,
|
||||
FirstWidgetsType = QIcon,
|
||||
|
@ -48,6 +48,7 @@
|
||||
#include "qdatetime.h"
|
||||
#include "qeasingcurve.h"
|
||||
#include "qlist.h"
|
||||
#include "qregularexpression.h"
|
||||
#include "qstring.h"
|
||||
#include "qstringlist.h"
|
||||
#include "qurl.h"
|
||||
@ -106,6 +107,7 @@ struct TypeDefinition {
|
||||
#ifdef QT_BOOTSTRAPPED
|
||||
template<> struct TypeDefinition<QEasingCurve> { static const bool IsAvailable = false; };
|
||||
template<> struct TypeDefinition<QModelIndex> { static const bool IsAvailable = false; };
|
||||
template<> struct TypeDefinition<QRegularExpression> { static const bool IsAvailable = false; };
|
||||
#endif
|
||||
#ifdef QT_NO_GEOM_VARIANT
|
||||
template<> struct TypeDefinition<QRect> { static const bool IsAvailable = false; };
|
||||
@ -1028,6 +1030,7 @@ Q_CORE_EXPORT void QVariantPrivate::unregisterHandler(const int /* Modules::Name
|
||||
\value Rect a QRect
|
||||
\value RectF a QRectF
|
||||
\value RegExp a QRegExp
|
||||
\value RegularExpression a QRegularExpression
|
||||
\value Region a QRegion
|
||||
\value Size a QSize
|
||||
\value SizeF a QSizeF
|
||||
@ -1358,6 +1361,14 @@ QVariant::QVariant(const char *val)
|
||||
Constructs a new variant with the regexp value \a regExp.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QVariant::QVariant(const QRegularExpression &re)
|
||||
|
||||
\since 5.0
|
||||
|
||||
Constructs a new variant with the regular expression value \a re.
|
||||
*/
|
||||
|
||||
/*! \since 4.2
|
||||
\fn QVariant::QVariant(Qt::GlobalColor color)
|
||||
|
||||
@ -1446,7 +1457,10 @@ QVariant::QVariant(const QUrl &u) { d.is_null = false; d.type = Url; v_construct
|
||||
QVariant::QVariant(const QLocale &l) { d.is_null = false; d.type = Locale; v_construct<QLocale>(&d, l); }
|
||||
#ifndef QT_NO_REGEXP
|
||||
QVariant::QVariant(const QRegExp ®Exp) { d.is_null = false; d.type = RegExp; v_construct<QRegExp>(&d, regExp); }
|
||||
#endif
|
||||
#ifndef QT_BOOTSTRAPPED
|
||||
QVariant::QVariant(const QRegularExpression &re) { d.is_null = false; d.type = QMetaType::QRegularExpression; v_construct<QRegularExpression>(&d, re); }
|
||||
#endif // QT_BOOTSTRAPPED
|
||||
#endif // QT_NO_REGEXP
|
||||
QVariant::QVariant(Qt::GlobalColor color) { create(62, &color); }
|
||||
|
||||
/*!
|
||||
@ -2126,6 +2140,24 @@ QRegExp QVariant::toRegExp() const
|
||||
}
|
||||
#endif
|
||||
|
||||
/*!
|
||||
\fn QRegularExpression QVariant::toRegularExpression() const
|
||||
\since 5.0
|
||||
|
||||
Returns the variant as a QRegularExpression if the variant has type() \l
|
||||
QRegularExpression; otherwise returns an empty QRegularExpression.
|
||||
|
||||
\sa canConvert(), convert()
|
||||
*/
|
||||
#ifndef QT_BOOTSTRAPPED
|
||||
#ifndef QT_NO_REGEXP
|
||||
QRegularExpression QVariant::toRegularExpression() const
|
||||
{
|
||||
return qVariantToHelper<QRegularExpression>(d, handlerManager);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*!
|
||||
\fn QChar QVariant::toChar() const
|
||||
|
||||
|
@ -76,7 +76,8 @@ class QRect;
|
||||
class QRectF;
|
||||
#ifndef QT_NO_REGEXP
|
||||
class QRegExp;
|
||||
#endif
|
||||
class QRegularExpression;
|
||||
#endif // QT_NO_REGEXP
|
||||
class QTextFormat;
|
||||
class QTextLength;
|
||||
class QUrl;
|
||||
@ -154,6 +155,7 @@ class Q_CORE_EXPORT QVariant
|
||||
Point = QMetaType::QPoint,
|
||||
PointF = QMetaType::QPointF,
|
||||
RegExp = QMetaType::QRegExp,
|
||||
RegularExpression = QMetaType::QRegularExpression,
|
||||
Hash = QMetaType::QVariantHash,
|
||||
EasingCurve = QMetaType::QEasingCurve,
|
||||
Uuid = QMetaType::QUuid,
|
||||
@ -239,7 +241,10 @@ class Q_CORE_EXPORT QVariant
|
||||
QVariant(const QLocale &locale);
|
||||
#ifndef QT_NO_REGEXP
|
||||
QVariant(const QRegExp ®Exp);
|
||||
#endif
|
||||
#ifndef QT_BOOTSRAPPED
|
||||
QVariant(const QRegularExpression &re);
|
||||
#endif // QT_BOOTSTRAPPED
|
||||
#endif // QT_NO_REGEXP
|
||||
#ifndef QT_BOOTSTRAPPED
|
||||
QVariant(const QEasingCurve &easing);
|
||||
#endif
|
||||
@ -302,7 +307,10 @@ class Q_CORE_EXPORT QVariant
|
||||
QLocale toLocale() const;
|
||||
#ifndef QT_NO_REGEXP
|
||||
QRegExp toRegExp() const;
|
||||
#endif
|
||||
#ifndef QT_BOOTSTRAPPED
|
||||
QRegularExpression toRegularExpression() const;
|
||||
#endif // QT_BOOTSTRAPPED
|
||||
#endif // QT_NO_REGEXP
|
||||
#ifndef QT_BOOTSTRAPPED
|
||||
QEasingCurve toEasingCurve() const;
|
||||
#endif
|
||||
|
@ -239,8 +239,6 @@ Q_DECLARE_TYPEINFO(QRegularExpressionMatchIterator, Q_MOVABLE_TYPE);
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
Q_DECLARE_METATYPE(QRegularExpression)
|
||||
|
||||
QT_END_HEADER
|
||||
|
||||
#endif // QT_NO_REGEXP
|
||||
|
@ -528,6 +528,16 @@ template<> struct TestValueFactory<QMetaType::QRegExp> {
|
||||
#endif
|
||||
}
|
||||
};
|
||||
template<> struct TestValueFactory<QMetaType::QRegularExpression> {
|
||||
static QRegularExpression *create()
|
||||
{
|
||||
#ifndef QT_NO_REGEXP
|
||||
return new QRegularExpression("abc.*def");
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
};
|
||||
template<> struct TestValueFactory<QMetaType::QVariant> {
|
||||
static QVariant *create() { return new QVariant(QStringList(QStringList() << "Q" << "t")); }
|
||||
};
|
||||
|
Binary file not shown.
@ -192,6 +192,7 @@ private slots:
|
||||
void toLocale();
|
||||
|
||||
void toRegExp();
|
||||
void toRegularExpression();
|
||||
|
||||
void matrix();
|
||||
|
||||
@ -1319,6 +1320,21 @@ void tst_QVariant::toRegExp()
|
||||
rx = variant.toRegExp();
|
||||
}
|
||||
|
||||
void tst_QVariant::toRegularExpression()
|
||||
{
|
||||
QVariant variant;
|
||||
QRegularExpression re = variant.toRegularExpression();
|
||||
QCOMPARE(re, QRegularExpression());
|
||||
|
||||
variant = QRegularExpression("abc.*def");
|
||||
re = variant.toRegularExpression();
|
||||
QCOMPARE(re, QRegularExpression("abc.*def"));
|
||||
|
||||
variant = QVariant::fromValue(QRegularExpression("[ab]\\w+"));
|
||||
re = variant.value<QRegularExpression>();
|
||||
QCOMPARE(re, QRegularExpression("[ab]\\w+"));
|
||||
}
|
||||
|
||||
void tst_QVariant::matrix()
|
||||
{
|
||||
QVariant variant;
|
||||
@ -1519,6 +1535,8 @@ void tst_QVariant::writeToReadFromDataStream_data()
|
||||
QTest::newRow( "qchar_null" ) << QVariant(QChar(0)) << true;
|
||||
QTest::newRow( "regexp" ) << QVariant(QRegExp("foo", Qt::CaseInsensitive)) << false;
|
||||
QTest::newRow( "regexp_empty" ) << QVariant(QRegExp()) << false;
|
||||
QTest::newRow( "regularexpression" ) << QVariant(QRegularExpression("abc.*def")) << false;
|
||||
QTest::newRow( "regularexpression_empty" ) << QVariant(QRegularExpression()) << false;
|
||||
|
||||
// types known to QMetaType, but not part of QVariant::Type
|
||||
QTest::newRow("QMetaType::Long invalid") << QVariant(QMetaType::Long, (void *) 0) << false;
|
||||
@ -1944,6 +1962,7 @@ void tst_QVariant::typeName_data()
|
||||
QTest::newRow("48") << int(QVariant::Vector3D) << QByteArray("QVector3D");
|
||||
QTest::newRow("49") << int(QVariant::Vector4D) << QByteArray("QVector4D");
|
||||
QTest::newRow("50") << int(QVariant::Quaternion) << QByteArray("QQuaternion");
|
||||
QTest::newRow("51") << int(QVariant::RegularExpression) << QByteArray("QRegularExpression");
|
||||
}
|
||||
|
||||
void tst_QVariant::typeName()
|
||||
|
Loading…
Reference in New Issue
Block a user