QmlDesigner: Add registerPropertyMap to StudioWelcome

This allows to easily register a singleton similar to
context properties.

Change-Id: I0c391165473a949e7fd09d907e3a0752c23ba62d
Reviewed-by: Henning Gründl <henning.gruendl@qt.io>
This commit is contained in:
Thomas Hartmann
2023-03-02 13:02:55 +01:00
parent af3c97ea7d
commit b2ba31f996
2 changed files with 42 additions and 0 deletions

View File

@@ -3,6 +3,7 @@
#include "studioquickwidget.h" #include "studioquickwidget.h"
#include <QQuickItem>
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QtQml/QQmlEngine> #include <QtQml/QQmlEngine>
@@ -58,3 +59,26 @@ QList<QQmlError> StudioQuickWidget::errors() const
{ {
return m_quickWidget->errors(); return m_quickWidget->errors();
} }
StudioPropertyMap *StudioQuickWidget::registerPropertyMap(const QByteArray &name)
{
StudioPropertyMap *map = new StudioPropertyMap(this);
[[maybe_unused]] const int typeIndex = qmlRegisterSingletonType<StudioPropertyMap>(
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<PropertyPair> &properties)
{
for (const PropertyPair &pair : properties)
insert(pair.name, pair.value);
}

View File

@@ -6,8 +6,23 @@
#include "../qmldesignerbase_global.h" #include "../qmldesignerbase_global.h"
#include <QObject> #include <QObject>
#include <QQmlPropertyMap>
#include <QtQuickWidgets/QQuickWidget> #include <QtQuickWidgets/QQuickWidget>
class QMLDESIGNERBASE_EXPORT StudioPropertyMap : public QQmlPropertyMap
{
public:
struct PropertyPair
{
QString name;
QVariant value;
};
explicit StudioPropertyMap(QObject *parent = 0);
void setProperties(const QList<PropertyPair> &properties);
};
class QMLDESIGNERBASE_EXPORT StudioQuickWidget : public QWidget class QMLDESIGNERBASE_EXPORT StudioQuickWidget : public QWidget
{ {
Q_OBJECT Q_OBJECT
@@ -29,6 +44,9 @@ public:
QList<QQmlError> errors() const; QList<QQmlError> errors() const;
StudioPropertyMap *registerPropertyMap(const QByteArray &name);
QQuickWidget *quickWidget() const;
private: private:
QQuickWidget *m_quickWidget = nullptr; QQuickWidget *m_quickWidget = nullptr;
}; };