diff --git a/src/libs/qmlpuppetcommunication/types/enumeration.h b/src/libs/qmlpuppetcommunication/types/enumeration.h index d1006bdee7c..4326f564bd7 100644 --- a/src/libs/qmlpuppetcommunication/types/enumeration.h +++ b/src/libs/qmlpuppetcommunication/types/enumeration.h @@ -20,7 +20,7 @@ using EnumerationNameView = QByteArrayView; class Enumeration { public: - Enumeration() = default; + constexpr Enumeration() = default; Enumeration(EnumerationName enumerationName) : m_enumerationName{std::move(enumerationName)} {} diff --git a/src/plugins/qmldesigner/libs/designercore/include/variantproperty.h b/src/plugins/qmldesigner/libs/designercore/include/variantproperty.h index ab531912cc8..ae2fc1a7c45 100644 --- a/src/plugins/qmldesigner/libs/designercore/include/variantproperty.h +++ b/src/plugins/qmldesigner/libs/designercore/include/variantproperty.h @@ -26,10 +26,14 @@ class QMLDESIGNERCORE_EXPORT VariantProperty final : public AbstractProperty public: void setValue(const QVariant &value); - QVariant value() const; + const QVariant &value() const; + + const QVariant &operator->() const { return value(); } + + const QVariant &operator*() const { return value(); } void setEnumeration(const EnumerationName &enumerationName); - Enumeration enumeration() const; + const Enumeration &enumeration() const; bool holdsEnumeration() const; void setDynamicTypeNameAndValue(const TypeName &type, const QVariant &value); diff --git a/src/plugins/qmldesigner/libs/designercore/model/internalvariantproperty.cpp b/src/plugins/qmldesigner/libs/designercore/model/internalvariantproperty.cpp index ec7987c38ea..7b3723b5a9e 100644 --- a/src/plugins/qmldesigner/libs/designercore/model/internalvariantproperty.cpp +++ b/src/plugins/qmldesigner/libs/designercore/model/internalvariantproperty.cpp @@ -11,7 +11,7 @@ InternalVariantProperty::InternalVariantProperty(PropertyNameView name, const In { } -QVariant InternalVariantProperty::value() const +const QVariant &InternalVariantProperty::value() const { return m_value; } diff --git a/src/plugins/qmldesigner/libs/designercore/model/internalvariantproperty.h b/src/plugins/qmldesigner/libs/designercore/model/internalvariantproperty.h index bf97c3d68a3..7f6340d83dc 100644 --- a/src/plugins/qmldesigner/libs/designercore/model/internalvariantproperty.h +++ b/src/plugins/qmldesigner/libs/designercore/model/internalvariantproperty.h @@ -18,7 +18,7 @@ public: bool isValid() const override; - QVariant value() const; + const QVariant &value() const; void setValue(const QVariant &value); void setDynamicValue(const TypeName &type, const QVariant &value); diff --git a/src/plugins/qmldesigner/libs/designercore/model/variantproperty.cpp b/src/plugins/qmldesigner/libs/designercore/model/variantproperty.cpp index a64f372a8ea..bf49c3678ab 100644 --- a/src/plugins/qmldesigner/libs/designercore/model/variantproperty.cpp +++ b/src/plugins/qmldesigner/libs/designercore/model/variantproperty.cpp @@ -47,7 +47,7 @@ void VariantProperty::setValue(const QVariant &value) privateModel()->setVariantProperty(internalNodeSharedPointer(), name(), value); } -QVariant VariantProperty::value() const +const QVariant &VariantProperty::value() const { if (isValid()) { auto property = internalNode()->variantProperty(name()); @@ -55,7 +55,9 @@ QVariant VariantProperty::value() const return property->value(); } - return QVariant(); + static const QVariant nullVariant; + + return nullVariant; } void VariantProperty::setEnumeration(const EnumerationName &enumerationName) @@ -63,9 +65,14 @@ void VariantProperty::setEnumeration(const EnumerationName &enumerationName) setValue(QVariant::fromValue(Enumeration(enumerationName))); } -Enumeration VariantProperty::enumeration() const +const Enumeration &VariantProperty::enumeration() const { - return value().value(); + if (auto enumeration = get_if(&value())) + return *enumeration; + + static constinit const Enumeration nullEnumeration; + + return nullEnumeration; } bool VariantProperty::holdsEnumeration() const