From 9478053838ae2d950b162c2b93a2a400c82d9bf7 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Sun, 13 May 2018 19:34:29 +0200 Subject: Create and init QQuickTheme from QtQuickControls2Plugin Instead of creating and setting the QQuickTheme instance from each style plugin (e.g. QtQuickControls2MaterialStylePlugin), create the QQuickTheme instance in QtQuickControls2Plugin when the style is being resolved, and just pass the instance to be initialized by the style plugin(s). This avoids the problem that QQuickTheme API was virtual, and sub-classes created from plugins would have vtables destroyed before the QQuickTheme was destroyed. Task-number: QTBUG-67062 Task-number: QTBUG-68087 Change-Id: I19e9ced5296b708c2668c30163389cb3da6be7cf Reviewed-by: Mitch Curtis --- src/imports/controls/universal/qquickuniversaltheme.cpp | 14 +++++--------- src/imports/controls/universal/qquickuniversaltheme_p.h | 12 +++++------- .../universal/qtquickcontrols2universalstyleplugin.cpp | 6 +++--- 3 files changed, 13 insertions(+), 19 deletions(-) (limited to 'src/imports/controls/universal') diff --git a/src/imports/controls/universal/qquickuniversaltheme.cpp b/src/imports/controls/universal/qquickuniversaltheme.cpp index 6485afbc..041dce9e 100644 --- a/src/imports/controls/universal/qquickuniversaltheme.cpp +++ b/src/imports/controls/universal/qquickuniversaltheme.cpp @@ -36,16 +36,12 @@ #include "qquickuniversaltheme_p.h" -#include #include +#include QT_BEGIN_NAMESPACE -QQuickUniversalTheme::QQuickUniversalTheme() -{ -} - -void QQuickUniversalTheme::resolve() +void QQuickUniversalTheme::initialize(QQuickTheme *theme) { QFont systemFont; QFont groupBoxTitleFont; @@ -60,15 +56,15 @@ void QQuickUniversalTheme::resolve() } systemFont.setPixelSize(15); - setFont(System, systemFont); + theme->setFont(QQuickTheme::System, systemFont); groupBoxTitleFont.setPixelSize(15); groupBoxTitleFont.setWeight(QFont::DemiBold); - setFont(GroupBox, groupBoxTitleFont); + theme->setFont(QQuickTheme::GroupBox, groupBoxTitleFont); tabButtonFont.setPixelSize(24); tabButtonFont.setWeight(QFont::Light); - setFont(TabBar, tabButtonFont); + theme->setFont(QQuickTheme::TabBar, tabButtonFont); } QT_END_NAMESPACE diff --git a/src/imports/controls/universal/qquickuniversaltheme_p.h b/src/imports/controls/universal/qquickuniversaltheme_p.h index f0f18db5..f762d0e3 100644 --- a/src/imports/controls/universal/qquickuniversaltheme_p.h +++ b/src/imports/controls/universal/qquickuniversaltheme_p.h @@ -48,18 +48,16 @@ // We mean it. // -#include -#include +#include QT_BEGIN_NAMESPACE -class QQuickUniversalTheme : public QQuickTheme +class QQuickTheme; + +class QQuickUniversalTheme { public: - explicit QQuickUniversalTheme(); - -protected: - void resolve() override; + static void initialize(QQuickTheme *theme); }; QT_END_NAMESPACE diff --git a/src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp b/src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp index edc14327..1265f636 100644 --- a/src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp +++ b/src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp @@ -55,7 +55,7 @@ public: void registerTypes(const char *uri) override; QString name() const override; - QQuickTheme *createTheme() const override; + void initializeTheme(QQuickTheme *theme) override; }; QtQuickControls2UniversalStylePlugin::QtQuickControls2UniversalStylePlugin(QObject *parent) : QQuickStylePlugin(parent) @@ -85,9 +85,9 @@ QString QtQuickControls2UniversalStylePlugin::name() const return QStringLiteral("Universal"); } -QQuickTheme *QtQuickControls2UniversalStylePlugin::createTheme() const +void QtQuickControls2UniversalStylePlugin::initializeTheme(QQuickTheme *theme) { - return new QQuickUniversalTheme; + QQuickUniversalTheme::initialize(theme); } QT_END_NAMESPACE -- cgit v1.2.3