From b2ba31f996b3299e443d13c0ada33d316778ffa7 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Thu, 2 Mar 2023 13:02:55 +0100 Subject: [PATCH] QmlDesigner: Add registerPropertyMap to StudioWelcome MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This allows to easily register a singleton similar to context properties. Change-Id: I0c391165473a949e7fd09d907e3a0752c23ba62d Reviewed-by: Henning Gründl --- .../utils/studioquickwidget.cpp | 24 +++++++++++++++++++ .../qmldesignerbase/utils/studioquickwidget.h | 18 ++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/plugins/qmldesignerbase/utils/studioquickwidget.cpp b/src/plugins/qmldesignerbase/utils/studioquickwidget.cpp index 8e19e71a562..2cfe5aa9741 100644 --- a/src/plugins/qmldesignerbase/utils/studioquickwidget.cpp +++ b/src/plugins/qmldesignerbase/utils/studioquickwidget.cpp @@ -3,6 +3,7 @@ #include "studioquickwidget.h" +#include #include #include @@ -58,3 +59,26 @@ QList StudioQuickWidget::errors() const { return m_quickWidget->errors(); } + +StudioPropertyMap *StudioQuickWidget::registerPropertyMap(const QByteArray &name) +{ + StudioPropertyMap *map = new StudioPropertyMap(this); + [[maybe_unused]] const int typeIndex = qmlRegisterSingletonType( + name.data(), 1, 0, name.data(), [map](QQmlEngine *, QJSEngine *) { return map; }); + return map; +} + +QQuickWidget *StudioQuickWidget::quickWidget() const +{ + return m_quickWidget; +} + +StudioPropertyMap::StudioPropertyMap(QObject *parent) + : QQmlPropertyMap(parent) +{} + +void StudioPropertyMap::setProperties(const QList &properties) +{ + for (const PropertyPair &pair : properties) + insert(pair.name, pair.value); +} diff --git a/src/plugins/qmldesignerbase/utils/studioquickwidget.h b/src/plugins/qmldesignerbase/utils/studioquickwidget.h index 17e31a43943..ef64fb6a69d 100644 --- a/src/plugins/qmldesignerbase/utils/studioquickwidget.h +++ b/src/plugins/qmldesignerbase/utils/studioquickwidget.h @@ -6,8 +6,23 @@ #include "../qmldesignerbase_global.h" #include +#include #include +class QMLDESIGNERBASE_EXPORT StudioPropertyMap : public QQmlPropertyMap +{ +public: + struct PropertyPair + { + QString name; + QVariant value; + }; + + explicit StudioPropertyMap(QObject *parent = 0); + + void setProperties(const QList &properties); +}; + class QMLDESIGNERBASE_EXPORT StudioQuickWidget : public QWidget { Q_OBJECT @@ -29,6 +44,9 @@ public: QList errors() const; + StudioPropertyMap *registerPropertyMap(const QByteArray &name); + QQuickWidget *quickWidget() const; + private: QQuickWidget *m_quickWidget = nullptr; };