diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2020-12-18 16:03:11 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2020-12-18 17:29:15 +0100 |
commit | b9f77cfaf7d2de84a6039d9a599671bd7f6218b7 (patch) | |
tree | 31f98ddce6d4115058fe3867f4534025d908ec4a /src/qml/jsapi/qjsprimitivevalue.h | |
parent | 6f181768a3147bbfa9a33cf2c05453365693f5b9 (diff) |
QJSPrimitiveValue: Add a toVariant() method and ctor from QVariant
This is rather handy. Without it, we have to go through either QJSValue
or QJSManagedValue, which causes much greater overhead.
Change-Id: I40e2ecb6e2005f80c8f52b5e9a59028b3984eea4
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/qml/jsapi/qjsprimitivevalue.h')
-rw-r--r-- | src/qml/jsapi/qjsprimitivevalue.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/qml/jsapi/qjsprimitivevalue.h b/src/qml/jsapi/qjsprimitivevalue.h index 27f38aec93..f9cc9f3089 100644 --- a/src/qml/jsapi/qjsprimitivevalue.h +++ b/src/qml/jsapi/qjsprimitivevalue.h @@ -45,6 +45,7 @@ #include <QtCore/qstring.h> #include <QtCore/qnumeric.h> +#include <QtCore/qvariant.h> #include <variant> @@ -160,6 +161,32 @@ public: constexpr QJSPrimitiveValue(int value) : d(value) {} constexpr QJSPrimitiveValue(double value) : d(value) {} QJSPrimitiveValue(QString string) : d(std::move(string)) {} + QJSPrimitiveValue(const QVariant &variant) + { + switch (variant.typeId()) { + case QMetaType::UnknownType: + d = QJSPrimitiveUndefined(); + break; + case QMetaType::Nullptr: + d = QJSPrimitiveNull(); + break; + case QMetaType::Bool: + d = variant.toBool(); + break; + case QMetaType::Int: + d = variant.toInt(); + break; + case QMetaType::Double: + d = variant.toDouble(); + break; + case QMetaType::QString: + d = variant.toString(); + break; + default: + // Unsupported. Remains undefined. + break; + } + } constexpr bool toBoolean() const { @@ -230,6 +257,21 @@ public: return QString(); } + QVariant toVariant() const + { + switch (type()) { + case Undefined: return QVariant(); + case Null: return QVariant::fromValue<std::nullptr_t>(nullptr); + case Boolean: return QVariant(asBoolean()); + case Integer: return QVariant(asInteger()); + case Double: return QVariant(asDouble()); + case String: return QVariant(asString()); + } + + Q_UNREACHABLE(); + return QVariant(); + } + friend inline QJSPrimitiveValue operator+(const QJSPrimitiveValue &lhs, const QJSPrimitiveValue &rhs) { |