aboutsummaryrefslogtreecommitdiffstats
path: root/examples/quick/embeddedinwidgets/main.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@digia.com>2014-03-05 10:44:52 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-03-05 13:09:54 +0100
commit6269e4fafc882b9727fe06b405b876af99060d8c (patch)
treec8dee94603677a680bfff9253bbe4028b09b568b /examples/quick/embeddedinwidgets/main.cpp
parentba4419df92bad6953c81be03a4ccf5cc137cb2d3 (diff)
Add some error handling to the QWindowContainer example.
Use a QMainWindow and display errors occurring during loading QML as well as scene graph errors (for example, failure to create an Open GL context) in the status bar. Change-Id: Id9cf190e8a4f40de0f18ab081e2747135221bb88 Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Diffstat (limited to 'examples/quick/embeddedinwidgets/main.cpp')
-rw-r--r--examples/quick/embeddedinwidgets/main.cpp72
1 files changed, 59 insertions, 13 deletions
diff --git a/examples/quick/embeddedinwidgets/main.cpp b/examples/quick/embeddedinwidgets/main.cpp
index 7a30b277de..dd2fda927b 100644
--- a/examples/quick/embeddedinwidgets/main.cpp
+++ b/examples/quick/embeddedinwidgets/main.cpp
@@ -39,35 +39,81 @@
**
****************************************************************************/
-#include <QWidget>
+#include <QMainWindow>
#include <QApplication>
#include <QVBoxLayout>
#include <QLineEdit>
+#include <QStatusBar>
+#include <QMenuBar>
+#include <QMenu>
+#include <QAction>
+#include <QQmlError>
#include <QQuickView>
-int main(int argc, char **argv)
-{
- QApplication app(argc, argv);
+class MainWindow : public QMainWindow {
+ Q_OBJECT
+public:
+ MainWindow();
- QWidget rootWidget;
+private slots:
+ void quickViewStatusChanged(QQuickView::Status);
+ void sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message);
- QVBoxLayout *layout = new QVBoxLayout();
- rootWidget.setLayout(layout);
+private:
+ QQuickView *m_quickView;
+};
+
+MainWindow::MainWindow()
+ : m_quickView(new QQuickView)
+{
+ QWidget *centralWidget = new QWidget(this);
+ QVBoxLayout *layout = new QVBoxLayout(centralWidget);
- QQuickView *view = new QQuickView();
- view->setResizeMode(QQuickView::SizeRootObjectToView);
- view->setSource(QUrl(QStringLiteral("qrc:///embeddedinwidgets/main.qml")));
+ m_quickView->setResizeMode(QQuickView::SizeRootObjectToView);
+ connect(m_quickView, SIGNAL(statusChanged(QQuickView::Status)),
+ this, SLOT(quickViewStatusChanged(QQuickView::Status)));
+ connect(m_quickView, SIGNAL(sceneGraphError(QQuickWindow::SceneGraphError,QString)),
+ this, SLOT(sceneGraphError(QQuickWindow::SceneGraphError,QString)));
+ m_quickView->setSource(QUrl(QStringLiteral("qrc:///embeddedinwidgets/main.qml")));
- QWidget *container = QWidget::createWindowContainer(view);
- container->setMinimumSize(view->size());
+ QWidget *container = QWidget::createWindowContainer(m_quickView);
+ container->setMinimumSize(m_quickView->size());
container->setFocusPolicy(Qt::TabFocus);
layout->addWidget(new QLineEdit(QStringLiteral("A QLineEdit")));
layout->addWidget(container);
layout->addWidget(new QLineEdit(QStringLiteral("A QLineEdit")));
+ setCentralWidget(centralWidget);
+
+ QMenu *fileMenu = menuBar()->addMenu(tr("File"));
+ QAction *quitAction = fileMenu->addAction(tr("Quit"));
+ connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
+}
+
+void MainWindow::quickViewStatusChanged(QQuickView::Status status)
+{
+ if (status == QQuickView::Error) {
+ QStringList errors;
+ foreach (const QQmlError &error, m_quickView->errors())
+ errors.append(error.toString());
+ statusBar()->showMessage(errors.join(QStringLiteral(", ")));
+ }
+}
- rootWidget.show();
+void MainWindow::sceneGraphError(QQuickWindow::SceneGraphError, const QString &message)
+{
+ statusBar()->showMessage(message);
+}
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+
+ MainWindow mainWindow;
+ mainWindow.show();
return app.exec();
}
+
+#include "main.moc"