diff --git a/src/plugins/qmldesignerbase/CMakeLists.txt b/src/plugins/qmldesignerbase/CMakeLists.txt index 63698d96443..fa7f63d5a94 100644 --- a/src/plugins/qmldesignerbase/CMakeLists.txt +++ b/src/plugins/qmldesignerbase/CMakeLists.txt @@ -1,5 +1,5 @@ add_qtc_plugin(QmlDesignerBase - DEPENDS Qt::Core + DEPENDS Qt::Core Qt::QuickWidgets PLUGIN_DEPENDS Core ProjectExplorer QtSupport SOURCES qmldesignerbase_global.h @@ -12,4 +12,5 @@ extend_qtc_plugin(QmlDesignerBase SOURCES designersettings.cpp designersettings.h qmlpuppetpaths.cpp qmlpuppetpaths.h + studioquickwidget.cpp studioquickwidget.h ) diff --git a/src/plugins/qmldesignerbase/utils/qmlpuppetpaths.h b/src/plugins/qmldesignerbase/utils/qmlpuppetpaths.h index 711ab100a20..a9b3b0b890d 100644 --- a/src/plugins/qmldesignerbase/utils/qmlpuppetpaths.h +++ b/src/plugins/qmldesignerbase/utils/qmlpuppetpaths.h @@ -1,6 +1,8 @@ // Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 +#pragma once + #include "../qmldesignerbase_global.h" #include diff --git a/src/plugins/qmldesignerbase/utils/studioquickwidget.cpp b/src/plugins/qmldesignerbase/utils/studioquickwidget.cpp new file mode 100644 index 00000000000..8e19e71a562 --- /dev/null +++ b/src/plugins/qmldesignerbase/utils/studioquickwidget.cpp @@ -0,0 +1,60 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 + +#include "studioquickwidget.h" + +#include +#include + +QQmlEngine *s_engine = nullptr; + +StudioQuickWidget::StudioQuickWidget(QWidget *parent) + : QWidget{parent} +{ + if (!s_engine) + s_engine = new QQmlEngine; + + m_quickWidget = new QQuickWidget(s_engine, this); + + QVBoxLayout *layout = new QVBoxLayout(this); + setLayout(layout); + layout->setContentsMargins(0, 0, 0, 0); + layout->addWidget(m_quickWidget); +} + +QQmlEngine *StudioQuickWidget::engine() const +{ + return m_quickWidget->engine(); +} + +QQmlContext *StudioQuickWidget::rootContext() const +{ + return m_quickWidget->rootContext(); +} + +QQuickItem *StudioQuickWidget::rootObject() const +{ + return m_quickWidget->rootObject(); +} + +void StudioQuickWidget::setResizeMode(QQuickWidget::ResizeMode mode) +{ + m_quickWidget->setResizeMode(mode); +} + +void StudioQuickWidget::setSource(const QUrl &url) +{ + m_quickWidget->setSource(url); +} + +void StudioQuickWidget::refresh() {} + +void StudioQuickWidget::setClearColor(const QColor &color) +{ + m_quickWidget->setClearColor(color); +} + +QList StudioQuickWidget::errors() const +{ + return m_quickWidget->errors(); +} diff --git a/src/plugins/qmldesignerbase/utils/studioquickwidget.h b/src/plugins/qmldesignerbase/utils/studioquickwidget.h new file mode 100644 index 00000000000..17e31a43943 --- /dev/null +++ b/src/plugins/qmldesignerbase/utils/studioquickwidget.h @@ -0,0 +1,34 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 + +#pragma once + +#include "../qmldesignerbase_global.h" + +#include +#include + +class QMLDESIGNERBASE_EXPORT StudioQuickWidget : public QWidget +{ + Q_OBJECT +public: + explicit StudioQuickWidget(QWidget *parent = nullptr); + + QQmlEngine *engine() const; + QQmlContext *rootContext() const; + + QQuickItem *rootObject() const; + + void setResizeMode(QQuickWidget::ResizeMode mode); + + void setSource(const QUrl &url); + + void refresh(); + + void setClearColor(const QColor &color); + + QList errors() const; + +private: + QQuickWidget *m_quickWidget = nullptr; +};