aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsapi/qjsprimitivevalue.h
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2020-12-18 16:03:11 +0100
committerUlf Hermann <ulf.hermann@qt.io>2020-12-18 17:29:15 +0100
commitb9f77cfaf7d2de84a6039d9a599671bd7f6218b7 (patch)
tree31f98ddce6d4115058fe3867f4534025d908ec4a /src/qml/jsapi/qjsprimitivevalue.h
parent6f181768a3147bbfa9a33cf2c05453365693f5b9 (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.h42
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)
{