diff options
author | Lars Knoll <lars.knoll@qt.io> | 2020-07-10 10:33:49 +0200 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@qt.io> | 2020-08-28 13:49:11 +0200 |
commit | 2afed94c70913e018198422ef222c9168326d09c (patch) | |
tree | 526952d291b70065886377e540f9e149be2f1537 /src/qml/jsapi | |
parent | 6e423233b2e419fc3d7fc30bebcad976dca31934 (diff) |
Fix QtQml after QMetaType/QVariant changes in Qt Core
Change-Id: I2a983cf8188e88d80d3b7726208d821427eb8f3c
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/qml/jsapi')
-rw-r--r-- | src/qml/jsapi/qjsvalue.cpp | 65 | ||||
-rw-r--r-- | src/qml/jsapi/qjsvalue.h | 5 |
2 files changed, 70 insertions, 0 deletions
diff --git a/src/qml/jsapi/qjsvalue.cpp b/src/qml/jsapi/qjsvalue.cpp index 663f6ced82..4a1833be51 100644 --- a/src/qml/jsapi/qjsvalue.cpp +++ b/src/qml/jsapi/qjsvalue.cpp @@ -1277,4 +1277,69 @@ bool QJSValue::isQMetaObject() const return QJSValuePrivate::asManagedType<QV4::QMetaObjectWrapper>(this); } +#ifndef QT_NO_DATASTREAM +QDataStream &operator<<(QDataStream &stream, const QJSValue &jsv) +{ + quint32 isNullOrUndefined = 0; + if (jsv.isNull()) + isNullOrUndefined |= 0x1; + if (jsv.isUndefined()) + isNullOrUndefined |= 0x2; + stream << isNullOrUndefined; + if (!isNullOrUndefined) { + const QVariant v = jsv.toVariant(); + switch (v.userType()) { + case QMetaType::Bool: + case QMetaType::Double: + case QMetaType::Int: + case QMetaType::QString: + v.save(stream); + break; + default: + qWarning() << "QDataStream::operator<< was to save a non-trivial QJSValue." + << "This is not supported anymore, please stream a QVariant instead."; + QVariant().save(stream); + break; + } + + } + return stream; +} + +QDataStream &operator>>(QDataStream &stream, QJSValue &jsv) +{ + quint32 isNullOrUndefined; + stream >> isNullOrUndefined; + + if (isNullOrUndefined & 0x1) { + jsv = QJSValue(QJSValue::NullValue); + } else if (isNullOrUndefined & 0x2) { + jsv = QJSValue(); + } else { + QVariant v; + v.load(stream); + + switch (v.userType()) { + case QMetaType::Bool: + jsv = QJSValue(v.toBool()); + break; + case QMetaType::Double: + jsv = QJSValue(v.toDouble()); + break; + case QMetaType::Int: + jsv = QJSValue(v.toInt()); + break; + case QMetaType::QString: + jsv = QJSValue(v.toString()); + break; + default: + qWarning() << "QDataStream::operator>> to restore a non-trivial QJSValue." + << "This is not supported anymore, please stream a QVariant instead."; + break; + } + } + return stream; +} +#endif + QT_END_NAMESPACE diff --git a/src/qml/jsapi/qjsvalue.h b/src/qml/jsapi/qjsvalue.h index 3da76d16cb..c814ce14f8 100644 --- a/src/qml/jsapi/qjsvalue.h +++ b/src/qml/jsapi/qjsvalue.h @@ -158,6 +158,11 @@ private: quint64 d; }; +#ifndef QT_NO_DATASTREAM +Q_QML_EXPORT QDataStream &operator<<(QDataStream &, const QJSValue &); +Q_QML_EXPORT QDataStream &operator>>(QDataStream &, QJSValue &); +#endif + QT_END_NAMESPACE Q_DECLARE_METATYPE(QJSValue) |