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:
parent
ba4419df92
commit
6269e4fafc
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue