diff options
author | Laszlo Agocs <laszlo.agocs@qt.io> | 2016-06-20 11:00:39 +0200 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@qt.io> | 2016-06-20 15:50:32 +0000 |
commit | b30d970691e9a6abf56bacb53a2d3f734d6f031c (patch) | |
tree | 455c5e3eb9ca5c33449c09c4c0a436cd5608689e /examples/quick/quickwidgets/quickwidget/main.cpp | |
parent | cc4954e9646cd93d9710e4e28942d2a82762771e (diff) |
Add a tab widget to QQuickWidget example
...and include a tab with custom OpenGL rendering. Tab widgets are
interesting because they are commonly used in applications in combination
with widgets like QOpenGLWidget and QQuickWidget, and because they typically
trigger rapid show-hide sequences which QQuickWidget does not always handle
as well as it could.
Thus this serves both as a helpful example and a useful testing tool.
Plus it exposes at least two bugs already, namely that the continuous
animation in the QQuickFBO does not start when switching to the tab
containing the QQuickWidget in question, and that it is impossible
to integrate third-party rendering code in a robust manner due to
QQuickWidget destroying everything whenever hiding the widget. This
is not what happens with a QQuickView and the normal render loops.
Task-number: QTBUG-54133
Change-Id: Ie7d92cd0f685e4a26f4bb351cc023eb697a36bf4
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Diffstat (limited to 'examples/quick/quickwidgets/quickwidget/main.cpp')
-rw-r--r-- | examples/quick/quickwidgets/quickwidget/main.cpp | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/examples/quick/quickwidgets/quickwidget/main.cpp b/examples/quick/quickwidgets/quickwidget/main.cpp index 65258d958e..2f73447a5d 100644 --- a/examples/quick/quickwidgets/quickwidget/main.cpp +++ b/examples/quick/quickwidgets/quickwidget/main.cpp @@ -41,6 +41,7 @@ #include <QQuickWidget> #include <QQmlError> #include <QtWidgets> +#include "fbitem.h" class MainWindow : public QMainWindow { Q_OBJECT @@ -52,6 +53,7 @@ private slots: void sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message); void grabToFile(); void renderToFile(); + void createQuickWidgetsInTabs(QMdiArea *mdiArea); private: QQuickWidget *m_quickWidget; @@ -74,7 +76,7 @@ MainWindow::MainWindow() QLCDNumber *lcd = new QLCDNumber; lcd->display(1337); lcd->setMinimumSize(250,100); - centralWidget ->addSubWindow(lcd); + centralWidget->addSubWindow(lcd); QUrl source("qrc:quickwidget/rotatingsquare.qml"); @@ -86,14 +88,42 @@ MainWindow::MainWindow() m_quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView ); m_quickWidget->setSource(source); - centralWidget ->addSubWindow(m_quickWidget); + centralWidget->addSubWindow(m_quickWidget); setCentralWidget(centralWidget); QMenu *fileMenu = menuBar()->addMenu(tr("&File")); - fileMenu->addAction(tr("Grab to imFage"), this, &MainWindow::grabToFile); + fileMenu->addAction(tr("Grab to image"), this, &MainWindow::grabToFile); fileMenu->addAction(tr("Render to pixmap"), this, &MainWindow::renderToFile); fileMenu->addAction(tr("Quit"), qApp, &QCoreApplication::quit); + + QMenu *windowMenu = menuBar()->addMenu(tr("&Window")); + windowMenu->addAction(tr("Add tab widget"), this, + [this, centralWidget] { createQuickWidgetsInTabs(centralWidget); }); +} + +void MainWindow::createQuickWidgetsInTabs(QMdiArea *mdiArea) +{ + QTabWidget *tabWidget = new QTabWidget; + + const QSize size(400, 400); + + QQuickWidget *w = new QQuickWidget; + w->resize(size); + w->setResizeMode(QQuickWidget::SizeRootObjectToView); + w->setSource(QUrl("qrc:quickwidget/rotatingsquaretab.qml")); + + tabWidget->addTab(w, tr("Plain Quick content")); + + w = new QQuickWidget; + w->resize(size); + w->setResizeMode(QQuickWidget::SizeRootObjectToView); + w->setSource(QUrl("qrc:quickwidget/customgl.qml")); + + tabWidget->addTab(w, tr("Custom OpenGL drawing")); + + mdiArea->addSubWindow(tabWidget); + tabWidget->show(); } void MainWindow::quickWidgetStatusChanged(QQuickWidget::Status status) @@ -139,6 +169,8 @@ int main(int argc, char **argv) { QApplication app(argc, argv); + qmlRegisterType<FbItem>("QuickWidgetExample", 1, 0, "FbItem"); + MainWindow mainWindow; mainWindow.show(); |