diff options
-rw-r--r-- | src/corelib/kernel/qmetatype.cpp | 15 | ||||
-rw-r--r-- | src/corelib/kernel/qmetatype.h | 1 | ||||
-rw-r--r-- | tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp | 3 |
3 files changed, 18 insertions, 1 deletions
diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp index 7298dc588f..78ade68a2c 100644 --- a/src/corelib/kernel/qmetatype.cpp +++ b/src/corelib/kernel/qmetatype.cpp @@ -1733,7 +1733,6 @@ bool QMetaType::debugStream(QDebug& dbg, const void *rhs) meta type. */ bool QMetaType::hasRegisteredDebugStreamOperator() const - { return d_ptr && d_ptr->debugStream != nullptr; } @@ -2687,6 +2686,20 @@ bool QMetaType::load(QDataStream &stream, void *data) const } /*! + \since 6.1 + + Returns \c true, if the meta type system has registered data stream operators for this + meta type. +*/ +bool QMetaType::hasRegisteredDataStreamOperators() const +{ + int type = id(); + if (type == QMetaType::Long || type == QMetaType::ULong) + return true; + return d_ptr && d_ptr->dataStreamIn != nullptr && d_ptr->dataStreamOut != nullptr; +} + +/*! \fn bool QMetaType::load(QDataStream &stream, int type, void *data) \overload \obsolete diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h index 7f61e28c37..e45c40c372 100644 --- a/src/corelib/kernel/qmetatype.h +++ b/src/corelib/kernel/qmetatype.h @@ -428,6 +428,7 @@ public: #ifndef QT_NO_DATASTREAM bool save(QDataStream &stream, const void *data) const; bool load(QDataStream &stream, void *data) const; + bool hasRegisteredDataStreamOperators() const; #if QT_DEPRECATED_SINCE(6, 0) QT_DEPRECATED_VERSION_6_0 diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp index b49f770919..8d5dcbb884 100644 --- a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp +++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp @@ -2033,11 +2033,14 @@ void tst_QMetaType::saveAndLoadBuiltin() QCOMPARE(stream.status(), QDataStream::Ok); if (isStreamable) { + QVERIFY(QMetaType(type).hasRegisteredDataStreamOperators()); QVERIFY(QMetaType::load(stream, type, value)); // Hmmm, shouldn't it return false? // std::nullptr_t is nullary: it doesn't actually read anything if (type != QMetaType::Nullptr) QCOMPARE(stream.status(), QDataStream::ReadPastEnd); + } else { + QVERIFY(!QMetaType(type).hasRegisteredDataStreamOperators()); } stream.device()->seek(0); |