summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/kernel/qmetatype.cpp15
-rw-r--r--src/corelib/kernel/qmetatype.h1
-rw-r--r--tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp3
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);