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>
This commit is contained in:
Friedemann Kleint 2014-03-05 10:44:52 +01:00 committed by The Qt Project
parent ba4419df92
commit 6269e4fafc
1 changed files with 60 additions and 14 deletions

View File

@ -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)
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow();
private slots:
void quickViewStatusChanged(QQuickView::Status);
void sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message);
private:
QQuickView *m_quickView;
};
MainWindow::MainWindow()
: m_quickView(new QQuickView)
{
QApplication app(argc, argv);
QWidget *centralWidget = new QWidget(this);
QVBoxLayout *layout = new QVBoxLayout(centralWidget);
QWidget rootWidget;
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")));
QVBoxLayout *layout = new QVBoxLayout();
rootWidget.setLayout(layout);
QQuickView *view = new QQuickView();
view->setResizeMode(QQuickView::SizeRootObjectToView);
view->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);
rootWidget.show();
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(", ")));
}
}
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"