Make QPersistentModelIndex an internal meta-type
It was already a user meta-type, so it only gets promoted to internal. [ChangeLog][QtCore] QPersistentModel index becomes an built-in meta-type, including QVariant support. Change-Id: I63d733d1eb66aa61691e7afce27fe7372a83ac00 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
This commit is contained in:
parent
9a3d7adaad
commit
374c60e046
@ -484,6 +484,5 @@ inline uint qHash(const QModelIndex &index) Q_DECL_NOTHROW
|
|||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(QModelIndexList)
|
Q_DECLARE_METATYPE(QModelIndexList)
|
||||||
Q_DECLARE_METATYPE(QPersistentModelIndex)
|
|
||||||
|
|
||||||
#endif // QABSTRACTITEMMODEL_H
|
#endif // QABSTRACTITEMMODEL_H
|
||||||
|
@ -277,6 +277,7 @@ struct DefinedTypesFilter {
|
|||||||
\value QJsonArray QJsonArray
|
\value QJsonArray QJsonArray
|
||||||
\value QJsonDocument QJsonDocument
|
\value QJsonDocument QJsonDocument
|
||||||
\value QModelIndex QModelIndex
|
\value QModelIndex QModelIndex
|
||||||
|
\value QPersistentModelIndex QPersistentModelIndex (since 5.5)
|
||||||
\value QUuid QUuid
|
\value QUuid QUuid
|
||||||
\value QByteArrayList QByteArrayList
|
\value QByteArrayList QByteArrayList
|
||||||
|
|
||||||
@ -1209,6 +1210,7 @@ bool QMetaType::save(QDataStream &stream, int type, const void *data)
|
|||||||
case QMetaType::VoidStar:
|
case QMetaType::VoidStar:
|
||||||
case QMetaType::QObjectStar:
|
case QMetaType::QObjectStar:
|
||||||
case QMetaType::QModelIndex:
|
case QMetaType::QModelIndex:
|
||||||
|
case QMetaType::QPersistentModelIndex:
|
||||||
case QMetaType::QJsonValue:
|
case QMetaType::QJsonValue:
|
||||||
case QMetaType::QJsonObject:
|
case QMetaType::QJsonObject:
|
||||||
case QMetaType::QJsonArray:
|
case QMetaType::QJsonArray:
|
||||||
@ -1429,6 +1431,7 @@ bool QMetaType::load(QDataStream &stream, int type, void *data)
|
|||||||
case QMetaType::VoidStar:
|
case QMetaType::VoidStar:
|
||||||
case QMetaType::QObjectStar:
|
case QMetaType::QObjectStar:
|
||||||
case QMetaType::QModelIndex:
|
case QMetaType::QModelIndex:
|
||||||
|
case QMetaType::QPersistentModelIndex:
|
||||||
case QMetaType::QJsonValue:
|
case QMetaType::QJsonValue:
|
||||||
case QMetaType::QJsonObject:
|
case QMetaType::QJsonObject:
|
||||||
case QMetaType::QJsonArray:
|
case QMetaType::QJsonArray:
|
||||||
|
@ -113,6 +113,7 @@ inline Q_DECL_CONSTEXPR int qMetaTypeId();
|
|||||||
F(QJsonObject, 46, QJsonObject) \
|
F(QJsonObject, 46, QJsonObject) \
|
||||||
F(QJsonArray, 47, QJsonArray) \
|
F(QJsonArray, 47, QJsonArray) \
|
||||||
F(QJsonDocument, 48, QJsonDocument) \
|
F(QJsonDocument, 48, QJsonDocument) \
|
||||||
|
F(QPersistentModelIndex, 50, QPersistentModelIndex) \
|
||||||
|
|
||||||
#define QT_FOR_EACH_STATIC_CORE_POINTER(F)\
|
#define QT_FOR_EACH_STATIC_CORE_POINTER(F)\
|
||||||
F(QObjectStar, 39, QObject*)
|
F(QObjectStar, 39, QObject*)
|
||||||
@ -407,7 +408,7 @@ public:
|
|||||||
QT_FOR_EACH_STATIC_TYPE(QT_DEFINE_METATYPE_ID)
|
QT_FOR_EACH_STATIC_TYPE(QT_DEFINE_METATYPE_ID)
|
||||||
|
|
||||||
FirstCoreType = Bool,
|
FirstCoreType = Bool,
|
||||||
LastCoreType = QByteArrayList,
|
LastCoreType = QPersistentModelIndex,
|
||||||
FirstGuiType = QFont,
|
FirstGuiType = QFont,
|
||||||
LastGuiType = QPolygonF,
|
LastGuiType = QPolygonF,
|
||||||
FirstWidgetsType = QSizePolicy,
|
FirstWidgetsType = QSizePolicy,
|
||||||
@ -431,7 +432,7 @@ public:
|
|||||||
QLocale = 18, QRect = 19, QRectF = 20, QSize = 21, QSizeF = 22,
|
QLocale = 18, QRect = 19, QRectF = 20, QSize = 21, QSizeF = 22,
|
||||||
QLine = 23, QLineF = 24, QPoint = 25, QPointF = 26, QRegExp = 27,
|
QLine = 23, QLineF = 24, QPoint = 25, QPointF = 26, QRegExp = 27,
|
||||||
QEasingCurve = 29, QUuid = 30, QVariant = 41, QModelIndex = 42,
|
QEasingCurve = 29, QUuid = 30, QVariant = 41, QModelIndex = 42,
|
||||||
QRegularExpression = 44,
|
QPersistentModelIndex = 50, QRegularExpression = 44,
|
||||||
QJsonValue = 45, QJsonObject = 46, QJsonArray = 47, QJsonDocument = 48,
|
QJsonValue = 45, QJsonObject = 46, QJsonArray = 47, QJsonDocument = 48,
|
||||||
QByteArrayList = 49, QObjectStar = 39, SChar = 40,
|
QByteArrayList = 49, QObjectStar = 39, SChar = 40,
|
||||||
Void = 43,
|
Void = 43,
|
||||||
|
@ -192,6 +192,7 @@ template<> struct TypeDefinition<QJsonDocument> { static const bool IsAvailable
|
|||||||
template<> struct TypeDefinition<QJsonObject> { static const bool IsAvailable = false; };
|
template<> struct TypeDefinition<QJsonObject> { static const bool IsAvailable = false; };
|
||||||
template<> struct TypeDefinition<QJsonValue> { static const bool IsAvailable = false; };
|
template<> struct TypeDefinition<QJsonValue> { static const bool IsAvailable = false; };
|
||||||
template<> struct TypeDefinition<QModelIndex> { static const bool IsAvailable = false; };
|
template<> struct TypeDefinition<QModelIndex> { static const bool IsAvailable = false; };
|
||||||
|
template<> struct TypeDefinition<QPersistentModelIndex> { static const bool IsAvailable = false; };
|
||||||
template<> struct TypeDefinition<QUrl> { static const bool IsAvailable = false; };
|
template<> struct TypeDefinition<QUrl> { static const bool IsAvailable = false; };
|
||||||
template<> struct TypeDefinition<QByteArrayList> { static const bool IsAvailable = false; };
|
template<> struct TypeDefinition<QByteArrayList> { static const bool IsAvailable = false; };
|
||||||
#endif
|
#endif
|
||||||
|
@ -390,7 +390,25 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
case QVariant::ModelIndex:
|
||||||
|
switch (d->type) {
|
||||||
|
case QVariant::PersistentModelIndex:
|
||||||
|
*static_cast<QModelIndex *>(result) = QModelIndex(*v_cast<QPersistentModelIndex>(d));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case QVariant::PersistentModelIndex:
|
||||||
|
switch (d->type) {
|
||||||
|
case QVariant::ModelIndex:
|
||||||
|
*static_cast<QPersistentModelIndex *>(result) = QPersistentModelIndex(*v_cast<QModelIndex>(d));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif // QT_BOOTSTRAPPED
|
||||||
case QVariant::String: {
|
case QVariant::String: {
|
||||||
QString *str = static_cast<QString *>(result);
|
QString *str = static_cast<QString *>(result);
|
||||||
switch (d->type) {
|
switch (d->type) {
|
||||||
@ -1208,6 +1226,7 @@ Q_CORE_EXPORT void QVariantPrivate::registerHandler(const int /* Modules::Names
|
|||||||
\value EasingCurve a QEasingCurve
|
\value EasingCurve a QEasingCurve
|
||||||
\value Uuid a QUuid
|
\value Uuid a QUuid
|
||||||
\value ModelIndex a QModelIndex
|
\value ModelIndex a QModelIndex
|
||||||
|
\value PersistentModelIndex a QPersistentModelIndex (since 5.5)
|
||||||
\value Font a QFont
|
\value Font a QFont
|
||||||
\value Hash a QVariantHash
|
\value Hash a QVariantHash
|
||||||
\value Icon a QIcon
|
\value Icon a QIcon
|
||||||
@ -1455,7 +1474,14 @@ QVariant::QVariant(const char *val)
|
|||||||
\since 5.0
|
\since 5.0
|
||||||
\fn QVariant::QVariant(const QModelIndex &val)
|
\fn QVariant::QVariant(const QModelIndex &val)
|
||||||
|
|
||||||
Constructs a new variant with an modelIndex value, \a val.
|
Constructs a new variant with a QModelIndex value, \a val.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\since 5.5
|
||||||
|
\fn QVariant::QVariant(const QPersistentModelIndex &val)
|
||||||
|
|
||||||
|
Constructs a new variant with a QPersistentModelIndex value, \a val.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -1763,6 +1789,9 @@ QVariant::QVariant(const QUuid &uuid)
|
|||||||
QVariant::QVariant(const QModelIndex &modelIndex)
|
QVariant::QVariant(const QModelIndex &modelIndex)
|
||||||
: d(ModelIndex)
|
: d(ModelIndex)
|
||||||
{ v_construct<QModelIndex>(&d, modelIndex); }
|
{ v_construct<QModelIndex>(&d, modelIndex); }
|
||||||
|
QVariant::QVariant(const QPersistentModelIndex &modelIndex)
|
||||||
|
: d(PersistentModelIndex)
|
||||||
|
{ v_construct<QPersistentModelIndex>(&d, modelIndex); }
|
||||||
QVariant::QVariant(const QJsonValue &jsonValue)
|
QVariant::QVariant(const QJsonValue &jsonValue)
|
||||||
: d(QMetaType::QJsonValue)
|
: d(QMetaType::QJsonValue)
|
||||||
{ v_construct<QJsonValue>(&d, jsonValue); }
|
{ v_construct<QJsonValue>(&d, jsonValue); }
|
||||||
@ -2492,13 +2521,26 @@ QUuid QVariant::toUuid() const
|
|||||||
Returns the variant as a QModelIndex if the variant has userType() \l
|
Returns the variant as a QModelIndex if the variant has userType() \l
|
||||||
QModelIndex; otherwise returns a default constructed QModelIndex.
|
QModelIndex; otherwise returns a default constructed QModelIndex.
|
||||||
|
|
||||||
\sa canConvert(), convert()
|
\sa canConvert(), convert(), toPersistentModelIndex()
|
||||||
*/
|
*/
|
||||||
QModelIndex QVariant::toModelIndex() const
|
QModelIndex QVariant::toModelIndex() const
|
||||||
{
|
{
|
||||||
return qVariantToHelper<QModelIndex>(d, handlerManager);
|
return qVariantToHelper<QModelIndex>(d, handlerManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\since 5.5
|
||||||
|
|
||||||
|
Returns the variant as a QPersistentModelIndex if the variant has userType() \l
|
||||||
|
QPersistentModelIndex; otherwise returns a default constructed QPersistentModelIndex.
|
||||||
|
|
||||||
|
\sa canConvert(), convert(), toModelIndex()
|
||||||
|
*/
|
||||||
|
QModelIndex QVariant::toPersistentModelIndex() const
|
||||||
|
{
|
||||||
|
return qVariantToHelper<QPersistentModelIndex>(d, handlerManager);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\since 5.0
|
\since 5.0
|
||||||
|
|
||||||
@ -2966,6 +3008,10 @@ static bool canConvertMetaObject(int fromId, int toId, QObject *fromObject)
|
|||||||
*/
|
*/
|
||||||
bool QVariant::canConvert(int targetTypeId) const
|
bool QVariant::canConvert(int targetTypeId) const
|
||||||
{
|
{
|
||||||
|
if ((targetTypeId == QMetaType::QModelIndex && d.type == QMetaType::QPersistentModelIndex)
|
||||||
|
|| (targetTypeId == QMetaType::QPersistentModelIndex && d.type == QMetaType::QModelIndex))
|
||||||
|
return true;
|
||||||
|
|
||||||
if (targetTypeId == QMetaType::QVariantList
|
if (targetTypeId == QMetaType::QVariantList
|
||||||
&& (d.type == QMetaType::QVariantList
|
&& (d.type == QMetaType::QVariantList
|
||||||
|| d.type == QMetaType::QStringList
|
|| d.type == QMetaType::QStringList
|
||||||
|
@ -156,6 +156,7 @@ class Q_CORE_EXPORT QVariant
|
|||||||
EasingCurve = QMetaType::QEasingCurve,
|
EasingCurve = QMetaType::QEasingCurve,
|
||||||
Uuid = QMetaType::QUuid,
|
Uuid = QMetaType::QUuid,
|
||||||
ModelIndex = QMetaType::QModelIndex,
|
ModelIndex = QMetaType::QModelIndex,
|
||||||
|
PersistentModelIndex = QMetaType::QPersistentModelIndex,
|
||||||
LastCoreType = QMetaType::LastCoreType,
|
LastCoreType = QMetaType::LastCoreType,
|
||||||
|
|
||||||
Font = QMetaType::QFont,
|
Font = QMetaType::QFont,
|
||||||
@ -245,6 +246,7 @@ class Q_CORE_EXPORT QVariant
|
|||||||
QVariant(const QEasingCurve &easing);
|
QVariant(const QEasingCurve &easing);
|
||||||
QVariant(const QUuid &uuid);
|
QVariant(const QUuid &uuid);
|
||||||
QVariant(const QModelIndex &modelIndex);
|
QVariant(const QModelIndex &modelIndex);
|
||||||
|
QVariant(const QPersistentModelIndex &modelIndex);
|
||||||
QVariant(const QJsonValue &jsonValue);
|
QVariant(const QJsonValue &jsonValue);
|
||||||
QVariant(const QJsonObject &jsonObject);
|
QVariant(const QJsonObject &jsonObject);
|
||||||
QVariant(const QJsonArray &jsonArray);
|
QVariant(const QJsonArray &jsonArray);
|
||||||
@ -318,6 +320,7 @@ class Q_CORE_EXPORT QVariant
|
|||||||
QEasingCurve toEasingCurve() const;
|
QEasingCurve toEasingCurve() const;
|
||||||
QUuid toUuid() const;
|
QUuid toUuid() const;
|
||||||
QModelIndex toModelIndex() const;
|
QModelIndex toModelIndex() const;
|
||||||
|
QModelIndex toPersistentModelIndex() const;
|
||||||
QJsonValue toJsonValue() const;
|
QJsonValue toJsonValue() const;
|
||||||
QJsonObject toJsonObject() const;
|
QJsonObject toJsonObject() const;
|
||||||
QJsonArray toJsonArray() const;
|
QJsonArray toJsonArray() const;
|
||||||
|
@ -661,6 +661,9 @@ template<> struct TestValueFactory<QMetaType::QUuid> {
|
|||||||
template<> struct TestValueFactory<QMetaType::QModelIndex> {
|
template<> struct TestValueFactory<QMetaType::QModelIndex> {
|
||||||
static QModelIndex *create() { return new QModelIndex(); }
|
static QModelIndex *create() { return new QModelIndex(); }
|
||||||
};
|
};
|
||||||
|
template<> struct TestValueFactory<QMetaType::QPersistentModelIndex> {
|
||||||
|
static QPersistentModelIndex *create() { return new QPersistentModelIndex(); }
|
||||||
|
};
|
||||||
template<> struct TestValueFactory<QMetaType::QRegExp> {
|
template<> struct TestValueFactory<QMetaType::QRegExp> {
|
||||||
static QRegExp *create()
|
static QRegExp *create()
|
||||||
{
|
{
|
||||||
@ -1735,6 +1738,7 @@ struct StreamingTraits
|
|||||||
DECLARE_NONSTREAMABLE(void)
|
DECLARE_NONSTREAMABLE(void)
|
||||||
DECLARE_NONSTREAMABLE(void*)
|
DECLARE_NONSTREAMABLE(void*)
|
||||||
DECLARE_NONSTREAMABLE(QModelIndex)
|
DECLARE_NONSTREAMABLE(QModelIndex)
|
||||||
|
DECLARE_NONSTREAMABLE(QPersistentModelIndex)
|
||||||
DECLARE_NONSTREAMABLE(QJsonValue)
|
DECLARE_NONSTREAMABLE(QJsonValue)
|
||||||
DECLARE_NONSTREAMABLE(QJsonObject)
|
DECLARE_NONSTREAMABLE(QJsonObject)
|
||||||
DECLARE_NONSTREAMABLE(QJsonArray)
|
DECLARE_NONSTREAMABLE(QJsonArray)
|
||||||
|
@ -248,6 +248,7 @@ private slots:
|
|||||||
void movabilityTest();
|
void movabilityTest();
|
||||||
void variantInVariant();
|
void variantInVariant();
|
||||||
void userConversion();
|
void userConversion();
|
||||||
|
void modelIndexConversion();
|
||||||
|
|
||||||
void forwardDeclare();
|
void forwardDeclare();
|
||||||
void debugStream_data();
|
void debugStream_data();
|
||||||
@ -3846,6 +3847,17 @@ void tst_QVariant::userConversion()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_QVariant::modelIndexConversion()
|
||||||
|
{
|
||||||
|
QVariant modelIndexVariant = QModelIndex();
|
||||||
|
QVERIFY(modelIndexVariant.canConvert(QMetaType::QPersistentModelIndex));
|
||||||
|
QVERIFY(modelIndexVariant.convert(QMetaType::QPersistentModelIndex));
|
||||||
|
QCOMPARE(modelIndexVariant.type(), QVariant::PersistentModelIndex);
|
||||||
|
QVERIFY(modelIndexVariant.canConvert(QMetaType::QModelIndex));
|
||||||
|
QVERIFY(modelIndexVariant.convert(QMetaType::QModelIndex));
|
||||||
|
QCOMPARE(modelIndexVariant.type(), QVariant::ModelIndex);
|
||||||
|
}
|
||||||
|
|
||||||
class Forward;
|
class Forward;
|
||||||
Q_DECLARE_OPAQUE_POINTER(Forward*)
|
Q_DECLARE_OPAQUE_POINTER(Forward*)
|
||||||
Q_DECLARE_METATYPE(Forward*)
|
Q_DECLARE_METATYPE(Forward*)
|
||||||
@ -4073,6 +4085,7 @@ void tst_QVariant::implicitConstruction()
|
|||||||
F(EasingCurve) \
|
F(EasingCurve) \
|
||||||
F(Uuid) \
|
F(Uuid) \
|
||||||
F(ModelIndex) \
|
F(ModelIndex) \
|
||||||
|
F(PersistentModelIndex) \
|
||||||
F(RegularExpression) \
|
F(RegularExpression) \
|
||||||
F(JsonValue) \
|
F(JsonValue) \
|
||||||
F(JsonObject) \
|
F(JsonObject) \
|
||||||
|
Loading…
Reference in New Issue
Block a user