Popup an error box when QtQuick errors occur.
This commit is contained in:
parent
010bfc8378
commit
1c78c65b19
2 changed files with 32 additions and 0 deletions
|
@ -17,6 +17,7 @@
|
||||||
#include <QQmlEngine>
|
#include <QQmlEngine>
|
||||||
#include <QQmlComponent>
|
#include <QQmlComponent>
|
||||||
#include <QQmlContext>
|
#include <QQmlContext>
|
||||||
|
#include <QQmlError>
|
||||||
|
|
||||||
// simgear headers
|
// simgear headers
|
||||||
#include <simgear/package/Install.hxx>
|
#include <simgear/package/Install.hxx>
|
||||||
|
@ -171,6 +172,9 @@ LauncherMainWindow::LauncherMainWindow() :
|
||||||
m_ui->aircraftList->engine()->rootContext()->setContextProperty("_launcher", this);
|
m_ui->aircraftList->engine()->rootContext()->setContextProperty("_launcher", this);
|
||||||
m_ui->aircraftList->engine()->setObjectOwnership(this, QQmlEngine::CppOwnership);
|
m_ui->aircraftList->engine()->setObjectOwnership(this, QQmlEngine::CppOwnership);
|
||||||
|
|
||||||
|
|
||||||
|
connect( m_ui->aircraftList, &QQuickWidget::statusChanged,
|
||||||
|
this, &LauncherMainWindow::onQuickStatusChanged);
|
||||||
m_ui->aircraftList->setSource(QUrl("qrc:///qml/AircraftList.qml"));
|
m_ui->aircraftList->setSource(QUrl("qrc:///qml/AircraftList.qml"));
|
||||||
|
|
||||||
// settings
|
// settings
|
||||||
|
@ -181,6 +185,8 @@ LauncherMainWindow::LauncherMainWindow() :
|
||||||
m_ui->settings->engine()->setObjectOwnership(this, QQmlEngine::CppOwnership);
|
m_ui->settings->engine()->setObjectOwnership(this, QQmlEngine::CppOwnership);
|
||||||
|
|
||||||
m_ui->settings->setResizeMode(QQuickWidget::SizeRootObjectToView);
|
m_ui->settings->setResizeMode(QQuickWidget::SizeRootObjectToView);
|
||||||
|
connect( m_ui->settings, &QQuickWidget::statusChanged,
|
||||||
|
this, &LauncherMainWindow::onQuickStatusChanged);
|
||||||
m_ui->settings->setSource(QUrl("qrc:///qml/Settings.qml"));
|
m_ui->settings->setSource(QUrl("qrc:///qml/Settings.qml"));
|
||||||
|
|
||||||
// environemnt
|
// environemnt
|
||||||
|
@ -193,6 +199,9 @@ LauncherMainWindow::LauncherMainWindow() :
|
||||||
m_ui->environmentPage->engine()->rootContext()->setContextProperty("_config", m_config);
|
m_ui->environmentPage->engine()->rootContext()->setContextProperty("_config", m_config);
|
||||||
|
|
||||||
m_ui->environmentPage->setResizeMode(QQuickWidget::SizeRootObjectToView);
|
m_ui->environmentPage->setResizeMode(QQuickWidget::SizeRootObjectToView);
|
||||||
|
|
||||||
|
connect( m_ui->environmentPage, &QQuickWidget::statusChanged,
|
||||||
|
this, &LauncherMainWindow::onQuickStatusChanged);
|
||||||
m_ui->environmentPage->setSource(QUrl("qrc:///qml/Environment.qml"));
|
m_ui->environmentPage->setSource(QUrl("qrc:///qml/Environment.qml"));
|
||||||
|
|
||||||
// summary
|
// summary
|
||||||
|
@ -200,6 +209,9 @@ LauncherMainWindow::LauncherMainWindow() :
|
||||||
m_ui->summary->engine()->rootContext()->setContextProperty("_launcher", this);
|
m_ui->summary->engine()->rootContext()->setContextProperty("_launcher", this);
|
||||||
m_ui->summary->engine()->setObjectOwnership(this, QQmlEngine::CppOwnership);
|
m_ui->summary->engine()->setObjectOwnership(this, QQmlEngine::CppOwnership);
|
||||||
m_ui->summary->setResizeMode(QQuickWidget::SizeRootObjectToView);
|
m_ui->summary->setResizeMode(QQuickWidget::SizeRootObjectToView);
|
||||||
|
|
||||||
|
connect( m_ui->summary, &QQuickWidget::statusChanged,
|
||||||
|
this, &LauncherMainWindow::onQuickStatusChanged);
|
||||||
m_ui->summary->setSource(QUrl("qrc:///qml/Summary.qml"));
|
m_ui->summary->setSource(QUrl("qrc:///qml/Summary.qml"));
|
||||||
//////////////////////////
|
//////////////////////////
|
||||||
|
|
||||||
|
@ -253,6 +265,24 @@ void LauncherMainWindow::initQML()
|
||||||
PreviewImageItem::setGlobalNetworkAccess(netAccess);
|
PreviewImageItem::setGlobalNetworkAccess(netAccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LauncherMainWindow::onQuickStatusChanged(QQuickWidget::Status status)
|
||||||
|
{
|
||||||
|
if (status == QQuickWidget::Error) {
|
||||||
|
QQuickWidget* qw = qobject_cast<QQuickWidget*>(sender());
|
||||||
|
QString errorString;
|
||||||
|
|
||||||
|
Q_FOREACH(auto err, qw->errors()) {
|
||||||
|
errorString.append("\n" + err.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
QMessageBox::critical(this, "UI loading failures.",
|
||||||
|
tr("Problems occurred loading the user interface. This is often due to missing modules on your system. "
|
||||||
|
"Please report this error to the FlightGear developer list or forum, and take care to mention your system "
|
||||||
|
"distribution, etc. Please also include the information provided below.\n")
|
||||||
|
+ errorString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
LauncherMainWindow::~LauncherMainWindow()
|
LauncherMainWindow::~LauncherMainWindow()
|
||||||
{
|
{
|
||||||
// avoid a double-free when the QQuickWidget's engine seems to try
|
// avoid a double-free when the QQuickWidget's engine seems to try
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include <QModelIndex>
|
#include <QModelIndex>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
|
#include <QQuickWidget>
|
||||||
|
|
||||||
#include <simgear/package/Package.hxx>
|
#include <simgear/package/Package.hxx>
|
||||||
#include <simgear/package/Catalog.hxx>
|
#include <simgear/package/Catalog.hxx>
|
||||||
|
@ -200,6 +201,7 @@ private slots:
|
||||||
void setSceneryPaths();
|
void setSceneryPaths();
|
||||||
void onAircraftPathsChanged();
|
void onAircraftPathsChanged();
|
||||||
void onChangeDataDir();
|
void onChangeDataDir();
|
||||||
|
void onQuickStatusChanged(QQuickWidget::Status status);
|
||||||
private:
|
private:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue