diff options
author | Friedemann Kleint <Friedemann.Kleint@digia.com> | 2014-03-05 10:44:52 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-03-05 13:09:54 +0100 |
commit | 6269e4fafc882b9727fe06b405b876af99060d8c (patch) | |
tree | c8dee94603677a680bfff9253bbe4028b09b568b | |
parent | ba4419df92bad6953c81be03a4ccf5cc137cb2d3 (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>
-rw-r--r-- | examples/quick/embeddedinwidgets/main.cpp | 72 |
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" |