From 6c5bae5704b6a5fc72f92b93cf220d7497951b4c Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Wed, 2 Dec 2020 09:10:10 +0100 Subject: Quick: Fortify QQuickApplication ctor If the qApp we have is in fact not a QGuiApplication we cannot connect those signals. The "if (qApp)" was probably supposed to check for this but actually doesn't because qApp is a static_cast. Change-Id: Iaa30e3d56768e97601d51d30500fc3b12d0626a3 Reviewed-by: Fabian Kosmale (cherry picked from commit 8a555cc22afb93dbe0e0da83f211c6e4f032bd09) Reviewed-by: Qt Cherry-pick Bot --- src/quick/util/qquickapplication.cpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) (limited to 'src/quick') diff --git a/src/quick/util/qquickapplication.cpp b/src/quick/util/qquickapplication.cpp index 1c0522451a..fa67823824 100644 --- a/src/quick/util/qquickapplication.cpp +++ b/src/quick/util/qquickapplication.cpp @@ -58,18 +58,19 @@ QT_BEGIN_NAMESPACE QQuickApplication::QQuickApplication(QObject *parent) : QQmlApplication(parent) { - if (qApp) { - connect(qApp, SIGNAL(layoutDirectionChanged(Qt::LayoutDirection)), - this, SIGNAL(layoutDirectionChanged())); - connect(qApp, SIGNAL(applicationStateChanged(Qt::ApplicationState)), - this, SIGNAL(stateChanged(Qt::ApplicationState))); - connect(qApp, SIGNAL(applicationStateChanged(Qt::ApplicationState)), - this, SIGNAL(activeChanged())); - connect(qApp, SIGNAL(applicationDisplayNameChanged()), - this, SIGNAL(displayNameChanged())); - - connect(qApp, &QGuiApplication::screenAdded, this, &QQuickApplication::updateScreens); - connect(qApp, &QGuiApplication::screenRemoved, this, &QQuickApplication::updateScreens); + QCoreApplication *app = QCoreApplication::instance(); + if (QGuiApplication *guiApp = qobject_cast(app)) { + connect(guiApp, &QGuiApplication::layoutDirectionChanged, + this, &QQuickApplication::layoutDirectionChanged); + connect(guiApp, &QGuiApplication::applicationStateChanged, + this, &QQuickApplication::stateChanged); + connect(guiApp, &QGuiApplication::applicationStateChanged, + this, &QQuickApplication::activeChanged); + connect(guiApp, &QGuiApplication::applicationDisplayNameChanged, + this, &QQuickApplication::displayNameChanged); + + connect(guiApp, &QGuiApplication::screenAdded, this, &QQuickApplication::updateScreens); + connect(guiApp, &QGuiApplication::screenRemoved, this, &QQuickApplication::updateScreens); updateScreens(); } } -- cgit v1.2.3