From 2e907e44f17b2393c09765fc3d305ff5e8b0e35c Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Mon, 7 Jul 2014 15:55:44 +0200 Subject: [PATCH] Revert "QmlDesigner: Using QQuickWidget in the Property Editor" This reverts commit eb5edae8ebee02ce896aab47f44f53721e793c3e. Because we get crashes with QQuickWidget Change-Id: I63546f4c59e382019cb8524e32071dc9ad8fd171 Reviewed-by: Tim Jenssen --- .../quick2propertyeditorview.cpp | 67 ++++++++++++++++++- .../propertyeditor/quick2propertyeditorview.h | 39 ++++++++++- 2 files changed, 101 insertions(+), 5 deletions(-) diff --git a/src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.cpp b/src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.cpp index 1d28219b1a9..4aa9efbf5a9 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.cpp @@ -34,12 +34,73 @@ #include "gradientmodel.h" #include "qmlanchorbindingproxy.h" +#include + namespace QmlDesigner { -Quick2PropertyEditorView::Quick2PropertyEditorView(QWidget *parent) : - QQuickWidget(parent) +void Quick2PropertyEditorView::execute() { - setResizeMode(QQuickWidget::SizeRootObjectToView); + m_view.setSource(m_source); + + if (!m_source.isEmpty()) { + m_view.setSource(m_source); + connect(&m_view, SIGNAL(statusChanged(QQuickView::Status)), this, SLOT(continueExecute())); + } +} + +Quick2PropertyEditorView::Quick2PropertyEditorView(QWidget *parent) : + QWidget(parent) +{ + m_containerWidget = createWindowContainer(&m_view); + + QVBoxLayout *layout = new QVBoxLayout(this); + setLayout(layout); + layout->addWidget(m_containerWidget); + layout->setMargin(0); + m_view.setResizeMode(QQuickView::SizeRootObjectToView); +} + +QUrl Quick2PropertyEditorView::source() const +{ + return m_source; +} + +void Quick2PropertyEditorView::setSource(const QUrl& url) +{ + m_source = url; + execute(); +} + +QQmlEngine* Quick2PropertyEditorView::engine() +{ + return m_view.engine(); +} + +QQmlContext* Quick2PropertyEditorView::rootContext() +{ + return engine()->rootContext(); +} + +Quick2PropertyEditorView::Status Quick2PropertyEditorView::status() const +{ + return Quick2PropertyEditorView::Status(m_view.status()); +} + + +void Quick2PropertyEditorView::continueExecute() +{ + disconnect(&m_view, SIGNAL(statusChanged(QQuickView::Status)), this, SLOT(continueExecute())); + + if (!m_view.errors().isEmpty()) { + QList errorList = m_view.errors(); + foreach (const QQmlError &error, errorList) { + qWarning() << error; + } + emit statusChanged(status()); + return; + } + + emit statusChanged(status()); } void Quick2PropertyEditorView::registerQmlTypes() diff --git a/src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.h b/src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.h index 0bc541bbf4a..da99157725c 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.h +++ b/src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.h @@ -30,19 +30,54 @@ #ifndef QUICK2PROERTYEDITORVIEW_H #define QUICK2PROERTYEDITORVIEW_H -#include +#include +#include +#include +#include +#include +#include +QT_BEGIN_NAMESPACE +class QQmlError; +class QQmlComponent; +QT_END_NAMESPACE namespace QmlDesigner { -class Quick2PropertyEditorView : public QQuickWidget +class Quick2PropertyEditorView : public QWidget { Q_OBJECT + Q_PROPERTY(QUrl source READ source WRITE setSource DESIGNABLE true) public: explicit Quick2PropertyEditorView(QWidget *parent = 0); + QUrl source() const; + void setSource(const QUrl&); + + QQmlEngine* engine(); + QQmlContext* rootContext(); + + enum Status { Null, Ready, Loading, Error }; + Status status() const; + static void registerQmlTypes(); + +signals: + void statusChanged(Quick2PropertyEditorView::Status); + +protected: + void execute(); + +private Q_SLOTS: + void continueExecute(); + +private: + QWidget *m_containerWidget; + QUrl m_source; + QQuickView m_view; + QPointer m_component; + }; } //QmlDesigner