[Interest] promoting a QGuiApplication to a QApplication?
René J.V. Bertin
rjvbertin at gmail.com
Wed Jul 11 16:48:31 CEST 2018
On Wednesday July 11 2018 17:20:51 Konstantin Tokarev wrote:
> If application object is created as QGuiApplication, you obviously cannot cast it to QApplication.
Maybe for casting, but
> If you want to do something only when application object is created as QApplication (or its subclass), use qApp pointer
Well, that's not enough. qApp exists and isn't NULL in other Q*Applications because qApp is just a cast of QCoreApplication::instance().
A bit of context may help.
The plugin I'm tinkering with is KDE's qqc2-desktop-style, which aims to implement a QtQuickControls2 style that follows the user's current desktop (= widget) style. In its current implementation it does this by querying `qApp->style()` every time the style must be called upon. When you select that style in a basic QQC2 application (say, the gallery demo) it will crash horribly.
My tinkering is under review here: https://phabricator.kde.org/D14000 . Instead of using qApp->style() directly I use QStyleFactory to create a style instance when qApp->style() returns NULL, and cache it because qApp->setStyle(newStyle) would also crash.
This works fine, as long as the style doesn't do anything that requires a QApplication and will crash (or abort) otherwise.
The only guarantee I can think of is would be promoting a QGuiApplication instance to QApplication at runtime, in the plugin.
More information about the Interest