refactor: Uses single QML engine for all QML code (#323)

* refactor: Uses single QML engine for all QML code

* fix: Adds missing `QPointer` include

* Parents QML engine instance to plugin instance.

---------

Co-authored-by: Ivan Lebedev <ilebedev@flightpath3d.com>
Co-authored-by: Ivan Lebedev <ilebedev1988@gmail.com>
This commit is contained in:
Ivan Lebedev
2026-04-28 16:33:03 +02:00
committed by GitHub
parent bbb9c47cbb
commit 9bb6d55687
9 changed files with 45 additions and 21 deletions

View File

@@ -3,6 +3,7 @@
#include "ChatView.hpp"
#include <QQmlComponent>
#include <QQmlContext>
#include <QQmlEngine>
#include <QSettings>
@@ -19,12 +20,21 @@ constexpr Qt::WindowFlags baseFlags = Qt::Window | Qt::WindowTitleHint | Qt::Win
namespace QodeAssist::Chat {
ChatView::ChatView()
: m_isPin(false)
ChatView::ChatView(QQmlEngine* engine)
: QQuickView{engine, nullptr}
, m_isPin(false)
{
setTitle("QodeAssist Chat");
engine()->rootContext()->setContextProperty("_chatview", this);
setSource(QUrl("qrc:/qt/qml/ChatView/qml/RootItem.qml"));
/// @note setup quick view content
{
auto context = new QQmlContext{engine, this};
context->setContextProperty("_chatview", this);
auto component = new QQmlComponent{engine, QUrl{"qrc:/qt/qml/ChatView/qml/RootItem.qml"}, this};
auto rootItem = component->create(context);
setContent(component->url(), component, rootItem);
}
setResizeMode(QQuickView::SizeRootObjectToView);
setMinimumSize({400, 300});
setFlags(baseFlags);

View File

@@ -13,7 +13,7 @@ class ChatView : public QQuickView
Q_OBJECT
Q_PROPERTY(bool isPin READ isPin WRITE setIsPin NOTIFY isPinChanged FINAL)
public:
ChatView();
ChatView(QQmlEngine* engine);
bool isPin() const;
void setIsPin(bool newIsPin);

View File

@@ -8,10 +8,17 @@
namespace QodeAssist::Chat {
ChatWidget::ChatWidget(QWidget *parent)
: QQuickWidget(parent)
ChatWidget::ChatWidget(QQmlEngine* engine, QWidget *parent)
: QQuickWidget{engine, parent}
{
setSource(QUrl("qrc:/qt/qml/ChatView/qml/RootItem.qml"));
/// @note setup quick view content
{
auto context = new QQmlContext{engine, this};
auto component = new QQmlComponent{engine, QUrl{"qrc:/qt/qml/ChatView/qml/RootItem.qml"}, this};
auto rootItem = component->create(context);
setContent(component->url(), component, rootItem);
}
setResizeMode(QQuickWidget::SizeRootObjectToView);
}

View File

@@ -12,7 +12,7 @@ class ChatWidget : public QQuickWidget
Q_OBJECT
public:
explicit ChatWidget(QWidget *parent = nullptr);
explicit ChatWidget(QQmlEngine* engine, QWidget *parent = nullptr);
~ChatWidget() = default;
Q_INVOKABLE void clear();