aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2015-03-26 21:34:42 +0100
committerGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2015-03-27 09:28:29 +0000
commit9cd486186e1e4e78f4f1b7e4a9142008a254c8cd (patch)
tree34bbe45bfe86d28851ec8e5c501a2499c3499954
parent5ac1654715b3e268d86570c860460f24697f2267 (diff)
QQuickWidget: expose the underlying QQuickWindow
There's a number of APIs (such as all the scenegraph-related signals) that are currently missing from QQuickWidget. Instead of duplicating every API in QQuickWidget, simply expose the underlying offscreen QQuickWindow. Task-number: QTBUG-45260 Change-Id: I1a89fe600ce675963ea24ee6dd56d6ca4fea9cd2 Reviewed-by: Andy Shaw <andy.shaw@digia.com> Reviewed-by: Gunnar Sletta <gunnar@sletta.org> Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
-rw-r--r--src/quickwidgets/qquickwidget.cpp19
-rw-r--r--src/quickwidgets/qquickwidget.h2
-rw-r--r--tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp33
3 files changed, 54 insertions, 0 deletions
diff --git a/src/quickwidgets/qquickwidget.cpp b/src/quickwidgets/qquickwidget.cpp
index c4100551d0..b472664068 100644
--- a/src/quickwidgets/qquickwidget.cpp
+++ b/src/quickwidgets/qquickwidget.cpp
@@ -1218,4 +1218,23 @@ void QQuickWidget::setClearColor(const QColor &color)
d->offscreenWindow->setColor(color);
}
+/*!
+ \since 5.5
+
+ Returns the offscreen QQuickWindow which is used by this widget to drive
+ the Qt Quick rendering. This is useful if you want to use QQuickWindow
+ APIs that are not currently exposed by QQuickWidget, for instance
+ connecting to the QQuickWindow::beforeRendering() signal in order
+ to draw native OpenGL content below Qt Quick's own rendering.
+
+ \warning Use the return value of this function with caution. In
+ particular, do not ever attempt to show the QQuickWindow, and be
+ very careful when using other QWindow-only APIs.
+*/
+QQuickWindow *QQuickWidget::quickWindow() const
+{
+ Q_D(const QQuickWidget);
+ return d->offscreenWindow;
+}
+
QT_END_NAMESPACE
diff --git a/src/quickwidgets/qquickwidget.h b/src/quickwidgets/qquickwidget.h
index b961a6eeaf..a8bf03edfb 100644
--- a/src/quickwidgets/qquickwidget.h
+++ b/src/quickwidgets/qquickwidget.h
@@ -90,6 +90,8 @@ public:
void setClearColor(const QColor &color);
+ QQuickWindow *quickWindow() const;
+
public Q_SLOTS:
void setSource(const QUrl&);
void setContent(const QUrl& url, QQmlComponent *component, QObject *item);
diff --git a/tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp b/tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp
index 1d9e40011d..3da920ca27 100644
--- a/tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp
+++ b/tests/auto/quickwidgets/qquickwidget/tst_qquickwidget.cpp
@@ -58,6 +58,7 @@ private slots:
void errors();
void engine();
void readback();
+ void renderingSignals();
};
@@ -259,6 +260,38 @@ void tst_qquickwidget::readback()
QCOMPARE(pix, qRgb(255, 0, 0));
}
+void tst_qquickwidget::renderingSignals()
+{
+ QQuickWidget widget;
+ QQuickWindow *window = widget.quickWindow();
+ QVERIFY(window);
+
+ QSignalSpy beforeRenderingSpy(window, &QQuickWindow::beforeRendering);
+ QSignalSpy beforeSyncSpy(window, &QQuickWindow::beforeSynchronizing);
+ QSignalSpy afterRenderingSpy(window, &QQuickWindow::afterRendering);
+
+ QVERIFY(beforeRenderingSpy.isValid());
+ QVERIFY(beforeSyncSpy.isValid());
+ QVERIFY(afterRenderingSpy.isValid());
+
+ QCOMPARE(beforeRenderingSpy.size(), 0);
+ QCOMPARE(beforeSyncSpy.size(), 0);
+ QCOMPARE(afterRenderingSpy.size(), 0);
+
+ widget.setSource(testFileUrl("rectangle.qml"));
+
+ QCOMPARE(beforeRenderingSpy.size(), 0);
+ QCOMPARE(beforeSyncSpy.size(), 0);
+ QCOMPARE(afterRenderingSpy.size(), 0);
+
+ widget.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&widget, 5000));
+
+ QTRY_VERIFY(beforeRenderingSpy.size() > 0);
+ QTRY_VERIFY(beforeSyncSpy.size() > 0);
+ QTRY_VERIFY(afterRenderingSpy.size() > 0);
+}
+
QTEST_MAIN(tst_qquickwidget)
#include "tst_qquickwidget.moc"