aboutsummaryrefslogtreecommitdiffstats
path: root/src/imports
diff options
context:
space:
mode:
Diffstat (limited to 'src/imports')
-rw-r--r--src/imports/controls/default/qtquickcontrols2defaultstyleplugin.cpp12
-rw-r--r--src/imports/controls/doc/src/qtquickcontrols2-customize.qdoc44
-rw-r--r--src/imports/controls/doc/src/qtquickcontrols2-environment.qdoc8
-rw-r--r--src/imports/controls/fusion/qmldir2
-rw-r--r--src/imports/controls/fusion/qtquickcontrols2fusionstyleplugin.cpp18
-rw-r--r--src/imports/controls/imagine/qmldir2
-rw-r--r--src/imports/controls/imagine/qtquickcontrols2imaginestyleplugin.cpp20
-rw-r--r--src/imports/controls/material/qmldir2
-rw-r--r--src/imports/controls/material/qtquickcontrols2materialstyleplugin.cpp17
-rw-r--r--src/imports/controls/qtquickcontrols2plugin.cpp160
-rw-r--r--src/imports/controls/universal/qmldir2
-rw-r--r--src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp18
12 files changed, 184 insertions, 121 deletions
diff --git a/src/imports/controls/default/qtquickcontrols2defaultstyleplugin.cpp b/src/imports/controls/default/qtquickcontrols2defaultstyleplugin.cpp
index 0ed33d12..a486658e 100644
--- a/src/imports/controls/default/qtquickcontrols2defaultstyleplugin.cpp
+++ b/src/imports/controls/default/qtquickcontrols2defaultstyleplugin.cpp
@@ -38,6 +38,7 @@
#include "qquickdefaulttheme_p.h"
#include <QtQuickControls2/private/qquickstyleplugin_p.h>
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
QT_BEGIN_NAMESPACE
@@ -50,7 +51,10 @@ public:
QtQuickControls2DefaultStylePlugin(QObject *parent = nullptr);
QString name() const override;
- void initializeTheme(QQuickTheme *theme) override;
+
+ void registerTypes(const char *uri) override;
+
+ QQuickDefaultTheme theme;
};
QtQuickControls2DefaultStylePlugin::QtQuickControls2DefaultStylePlugin(QObject *parent) : QQuickStylePlugin(parent)
@@ -62,9 +66,11 @@ QString QtQuickControls2DefaultStylePlugin::name() const
return QStringLiteral("Default");
}
-void QtQuickControls2DefaultStylePlugin::initializeTheme(QQuickTheme *theme)
+void QtQuickControls2DefaultStylePlugin::registerTypes(const char *uri)
{
- QQuickDefaultTheme::initialize(theme);
+ QQuickStylePlugin::registerTypes(uri);
+
+ theme.initialize(QQuickTheme::instance());
}
QT_END_NAMESPACE
diff --git a/src/imports/controls/doc/src/qtquickcontrols2-customize.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-customize.qdoc
index 6ab649d0..58138a07 100644
--- a/src/imports/controls/doc/src/qtquickcontrols2-customize.qdoc
+++ b/src/imports/controls/doc/src/qtquickcontrols2-customize.qdoc
@@ -112,7 +112,7 @@
\section2 Definition of a Style
In Qt Quick Controls, a style is essentially an interchangeable set of
- QML files within a single directory. There are three requirements for a style
+ QML files within a single directory. There are four requirements for a style
to be \l {Using Styles in Qt Quick Controls}{usable}:
\list
@@ -125,21 +125,37 @@
If we instead used the corresponding type from the \l {Qt Quick Controls}
{QtQuick.Controls} import as we did in the previous section, it would not work:
the control we were defining would try to derive from itself.
- \li The files must be in a directory in the filesystem or in the
- \l {The Qt Resource System}{resource system}.
+ \li A \l {Module Definition qmldir Files}{qmldir} file must exist alongside
+ the QML file(s). Below is an example of a simple \c qmldir file for a style that
+ provides a button:
- For example, these are all valid paths to a style:
+ \badcode
+ module MyStyle
+ Button 2.15 Button.qml
+ \endcode
+
+ The directory structure for such a style looks like this:
+
+ \badcode
+ MyStyle
+ ├─── Button.qml
+ └─── qmldir
+ \endcode
+ \li The files must be in a directory that is findable via the \l {QML Import Path}.
+
+ For example, if the path to \e MyStyle directory mentioned above was
+ \c /home/user/MyApp/MyStyle, then \c /home/user/MyApp must be added to
+ the QML import path.
+
+ To \l {Using Styles in Qt Quick Controls}{use} \e MyStyle in \e MyApp,
+ refer to it by name:
\list
- \li \c {./myapp -style /home/absolute/path/to/my/style}
- \li \c {./myapp -style :/mystyle}
- \li \c {./myapp -style relative/path/to/my/style}
- \li \c {./myapp -style MyStyle}
+ \li \c {./MyApp -style MyStyle}
\endlist
- The third and fourth paths will be looked up within the QML engine's import path
- list. This is the same as what happens when you pass \c Material as the style,
- for example.
+ The style name must match the casing of the style directory; passing
+ \e mystyle or \e MYSTYLE is not supported.
\endlist
By default, the styling system uses the Default style as a fallback for
@@ -302,7 +318,7 @@
style will illustrate the elevation with a drop shadow; the higher the
elevation, the larger the shadow.
- The first step is to \l {Qt Creator: Creating Qt Quick Projects}{create a new Qt Quick
+ The first step is to \l {Creating Qt Quick Projects}{create a new Qt Quick
Controls 2 application} in Qt Creator. After that, we
\l {Qt Creator: Creating C++ Classes}{add a C++ type} that stores the elevation. Since
the type will be used for every control supported by our style, and because
@@ -390,6 +406,8 @@
qmlRegisterUncreatableType<MyStyle>("MyStyle", 1, 0, "MyStyle", "MyStyle is an attached property");
QQmlApplicationEngine engine;
+ // Make the directory containing our style known to the QML engine.
+ engine.addImportPath(":/");
engine.load(QUrl(QLatin1String("qrc:/main.qml")));
return app.exec();
@@ -465,7 +483,7 @@
One button has no elevation, and the other has an elevation of \c 10.
With that in place, we can run our example. To tell the application to
- use our new style, we pass \c {-style :/mystyle} as an application
+ use our new style, we pass \c {-style MyStyle} as an application
argument, but there are \l {Using Styles in Qt Quick Controls}{many
ways} to specify the style to use.
diff --git a/src/imports/controls/doc/src/qtquickcontrols2-environment.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-environment.qdoc
index e1461ee4..4484acf3 100644
--- a/src/imports/controls/doc/src/qtquickcontrols2-environment.qdoc
+++ b/src/imports/controls/doc/src/qtquickcontrols2-environment.qdoc
@@ -41,18 +41,12 @@
\li \c QT_QUICK_CONTROLS_STYLE
\li Specifies the default \l {Styling Qt Quick Controls}{Qt Quick Controls style}.
The value can be either one of the built-in styles, for example \c "Material",
- or the path to a custom style such as \c ":/mystyle".
+ or a custom style such as \c "MyStyle".
\row
\li \c QT_QUICK_CONTROLS_FALLBACK_STYLE
\li Specifies a fallback style for \l {Creating a Custom Style}{custom styles}.
The value can be one of the built-in styles, for example \c "Material",
\row
- \li \c QT_QUICK_CONTROLS_STYLE_PATH
- \li Specifies a list of additional paths that are used to lookup \l {Styling Qt Quick Controls}
- {Qt Quick Controls styles}. Multiple path entries must be \l {QDir::listSeparator}{separated}
- by \c ':' under Unix and \c ';' under Windows. By default, styles are looked up from
- \c $QML2_IMPORT_PATH/QtQuick/Controls.
- \row
\li \c QT_QUICK_CONTROLS_CONF
\li Specifies the location of the \l {Qt Quick Controls configuration file}.
By default, the configuration file is loaded from the application's
diff --git a/src/imports/controls/fusion/qmldir b/src/imports/controls/fusion/qmldir
index 572a6dd2..84c0b211 100644
--- a/src/imports/controls/fusion/qmldir
+++ b/src/imports/controls/fusion/qmldir
@@ -1,7 +1,7 @@
module QtQuick.Controls.Fusion
plugin qtquickcontrols2fusionstyleplugin
classname QtQuickControls2FusionStylePlugin
-depends QtQuick.Controls 2.5
+import QtQuick.Controls.Default auto
# QtQuick.Controls 2.0 (originally introduced in Qt 5.7)
ApplicationWindow 2.0 ApplicationWindow.qml
diff --git a/src/imports/controls/fusion/qtquickcontrols2fusionstyleplugin.cpp b/src/imports/controls/fusion/qtquickcontrols2fusionstyleplugin.cpp
index b9df2e7d..c70c9602 100644
--- a/src/imports/controls/fusion/qtquickcontrols2fusionstyleplugin.cpp
+++ b/src/imports/controls/fusion/qtquickcontrols2fusionstyleplugin.cpp
@@ -34,12 +34,13 @@
**
****************************************************************************/
-#include <QtQuickControls2/private/qquickstyleplugin_p.h>
-#include <QtQml/qqml.h>
-
#include "qquickfusionstyle_p.h"
#include "qquickfusiontheme_p.h"
+#include <QtQml/qqml.h>
+#include <QtQuickControls2/private/qquickstyleplugin_p.h>
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
+
QT_BEGIN_NAMESPACE
class QtQuickControls2FusionStylePlugin : public QQuickStylePlugin
@@ -51,7 +52,10 @@ public:
QtQuickControls2FusionStylePlugin(QObject *parent = nullptr);
QString name() const override;
- void initializeTheme(QQuickTheme *theme) override;
+
+ void registerTypes(const char *uri) override;
+
+ QQuickFusionTheme theme;
};
QtQuickControls2FusionStylePlugin::QtQuickControls2FusionStylePlugin(QObject *parent) : QQuickStylePlugin(parent)
@@ -63,9 +67,11 @@ QString QtQuickControls2FusionStylePlugin::name() const
return QStringLiteral("Fusion");
}
-void QtQuickControls2FusionStylePlugin::initializeTheme(QQuickTheme *theme)
+void QtQuickControls2FusionStylePlugin::registerTypes(const char *uri)
{
- QQuickFusionTheme::initialize(theme);
+ QQuickStylePlugin::registerTypes(uri);
+
+ theme.initialize(QQuickTheme::instance());
}
QT_END_NAMESPACE
diff --git a/src/imports/controls/imagine/qmldir b/src/imports/controls/imagine/qmldir
index 380a0dc3..e3d7d8d5 100644
--- a/src/imports/controls/imagine/qmldir
+++ b/src/imports/controls/imagine/qmldir
@@ -1,7 +1,7 @@
module QtQuick.Controls.Imagine
plugin qtquickcontrols2imaginestyleplugin
classname QtQuickControls2ImagineStylePlugin
-depends QtQuick.Controls 2.5
+import QtQuick.Controls.Default auto
# QtQuick.Controls 2.0 (originally introduced in Qt 5.7)
ApplicationWindow 2.0 ApplicationWindow.qml
diff --git a/src/imports/controls/imagine/qtquickcontrols2imaginestyleplugin.cpp b/src/imports/controls/imagine/qtquickcontrols2imaginestyleplugin.cpp
index d59cf555..0c864254 100644
--- a/src/imports/controls/imagine/qtquickcontrols2imaginestyleplugin.cpp
+++ b/src/imports/controls/imagine/qtquickcontrols2imaginestyleplugin.cpp
@@ -34,13 +34,14 @@
**
****************************************************************************/
-#include <QtQuickControls2/private/qquickstyleplugin_p.h>
-#include <QtCore/qloggingcategory.h>
-#include <QtQml/qqml.h>
-
#include "qquickimaginestyle_p.h"
#include "qquickimaginetheme_p.h"
+#include <QtCore/qloggingcategory.h>
+#include <QtQml/qqml.h>
+#include <QtQuickControls2/private/qquickstyleplugin_p.h>
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
+
QT_BEGIN_NAMESPACE
class QtQuickControls2ImagineStylePlugin : public QQuickStylePlugin
@@ -52,7 +53,10 @@ public:
QtQuickControls2ImagineStylePlugin(QObject *parent = nullptr);
QString name() const override;
- void initializeTheme(QQuickTheme *theme) override;
+
+ void registerTypes(const char *uri) override;
+
+ QQuickImagineTheme theme;
};
QtQuickControls2ImagineStylePlugin::QtQuickControls2ImagineStylePlugin(QObject *parent) : QQuickStylePlugin(parent)
@@ -64,9 +68,11 @@ QString QtQuickControls2ImagineStylePlugin::name() const
return QStringLiteral("Imagine");
}
-void QtQuickControls2ImagineStylePlugin::initializeTheme(QQuickTheme *theme)
+void QtQuickControls2ImagineStylePlugin::registerTypes(const char *uri)
{
- QQuickImagineTheme::initialize(theme);
+ QQuickStylePlugin::registerTypes(uri);
+
+ theme.initialize(QQuickTheme::instance());
}
QT_END_NAMESPACE
diff --git a/src/imports/controls/material/qmldir b/src/imports/controls/material/qmldir
index a1064229..39dae48a 100644
--- a/src/imports/controls/material/qmldir
+++ b/src/imports/controls/material/qmldir
@@ -1,7 +1,7 @@
module QtQuick.Controls.Material
plugin qtquickcontrols2materialstyleplugin
classname QtQuickControls2MaterialStylePlugin
-depends QtQuick.Controls 2.5
+import QtQuick.Controls.Default auto
# QtQuick.Controls 2.0 (originally introduced in Qt 5.7)
ApplicationWindow 2.0 ApplicationWindow.qml
diff --git a/src/imports/controls/material/qtquickcontrols2materialstyleplugin.cpp b/src/imports/controls/material/qtquickcontrols2materialstyleplugin.cpp
index dc6873bb..6066d3f5 100644
--- a/src/imports/controls/material/qtquickcontrols2materialstyleplugin.cpp
+++ b/src/imports/controls/material/qtquickcontrols2materialstyleplugin.cpp
@@ -34,12 +34,12 @@
**
****************************************************************************/
-#include <QtQuickControls2/private/qquickstyleplugin_p.h>
-
#include "qquickmaterialstyle_p.h"
#include "qquickmaterialtheme_p.h"
+#include <QtQuickControls2/private/qquickstyleplugin_p.h>
#include <QtQuickControls2Impl/private/qquickpaddedrectangle_p.h>
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
QT_BEGIN_NAMESPACE
@@ -52,12 +52,14 @@ public:
QtQuickControls2MaterialStylePlugin(QObject *parent = nullptr);
QString name() const override;
- void initializeTheme(QQuickTheme *theme) override;
+
+ void registerTypes(const char *uri) override;
+
+ QQuickMaterialTheme theme;
};
QtQuickControls2MaterialStylePlugin::QtQuickControls2MaterialStylePlugin(QObject *parent) : QQuickStylePlugin(parent)
{
- QQuickMaterialStyle::initGlobals();
}
QString QtQuickControls2MaterialStylePlugin::name() const
@@ -65,9 +67,12 @@ QString QtQuickControls2MaterialStylePlugin::name() const
return QStringLiteral("Material");
}
-void QtQuickControls2MaterialStylePlugin::initializeTheme(QQuickTheme *theme)
+void QtQuickControls2MaterialStylePlugin::registerTypes(const char *uri)
{
- QQuickMaterialTheme::initialize(theme);
+ QQuickStylePlugin::registerTypes(uri);
+
+ QQuickMaterialStyle::initGlobals();
+ theme.initialize(QQuickTheme::instance());
}
QT_END_NAMESPACE
diff --git a/src/imports/controls/qtquickcontrols2plugin.cpp b/src/imports/controls/qtquickcontrols2plugin.cpp
index 17eb2be9..ef642905 100644
--- a/src/imports/controls/qtquickcontrols2plugin.cpp
+++ b/src/imports/controls/qtquickcontrols2plugin.cpp
@@ -37,6 +37,7 @@
#include <QtCore/qdir.h>
#include <QtCore/qfile.h>
#include <QtCore/qfileinfo.h>
+#include <QtCore/qloggingcategory.h>
#include <QtCore/qpluginloader.h>
#include <QtCore/private/qfileselector_p.h>
#include <QtQml/qqmlfile.h>
@@ -50,6 +51,8 @@
QT_BEGIN_NAMESPACE
+Q_LOGGING_CATEGORY(lcQtQuickControlsStylePlugin, "qt.quick.controls.qtquickcontrols2plugin")
+
class QtQuickControls2Plugin : public QQmlExtensionPlugin
{
Q_OBJECT
@@ -59,17 +62,41 @@ public:
QtQuickControls2Plugin(QObject *parent = nullptr);
~QtQuickControls2Plugin();
- void initializeEngine(QQmlEngine *engine, const char *uri) override;
void registerTypes(const char *uri) override;
void unregisterTypes() override;
private:
- void init();
-
- QList<QQuickStylePlugin *> loadStylePlugins();
QQuickTheme *createTheme(const QString &name);
+
+ bool registeredFallbackImport = false;
};
+static const char *qtQuickControlsUri = "QtQuick.Controls";
+
+QString styleUri()
+{
+ const QString style = QQuickStyle::name();
+ if (!QQuickStylePrivate::isCustomStyle()) {
+ // The style set is a built-in style.
+ const QString styleName = QQuickStylePrivate::effectiveStyleName(style);
+ return QString::fromLatin1("QtQuick.Controls.%1").arg(styleName);
+ }
+
+ // This is a custom style, so just use the name as the import uri.
+ QString styleName = style;
+ if (styleName.startsWith(QLatin1String(":/")))
+ styleName.remove(0, 2);
+ return styleName;
+}
+
+QString fallbackStyleUri()
+{
+ // The fallback style must be a built-in style, so we don't need to check for custom styles here.
+ const QString fallbackStyle = QQuickStylePrivate::fallbackStyle();
+ const QString fallbackStyleName = QQuickStylePrivate::effectiveStyleName(fallbackStyle);
+ return QString::fromLatin1("QtQuick.Controls.%1").arg(fallbackStyleName);
+}
+
QtQuickControls2Plugin::QtQuickControls2Plugin(QObject *parent) : QQmlExtensionPlugin(parent)
{
}
@@ -80,88 +107,83 @@ QtQuickControls2Plugin::~QtQuickControls2Plugin()
// initialization and cleanup, as plugins are not unloaded on macOS.
}
-void QtQuickControls2Plugin::initializeEngine(QQmlEngine *engine, const char */*uri*/)
+void QtQuickControls2Plugin::registerTypes(const char *uri)
{
- engine->addUrlInterceptor(&QQuickStylePrivate::urlInterceptor);
- init();
-}
+ qCDebug(lcQtQuickControlsStylePlugin) << "registerTypes() called with uri" << uri;
+
+ // It's OK that the style is resolved more than once; some accessors like name() cause it to be called, for example.
+ QQuickStylePrivate::init();
+
+ const QString styleName = QQuickStylePrivate::effectiveStyleName(QQuickStyle::name());
+ const QString fallbackStyleName = QQuickStylePrivate::effectiveStyleName(QQuickStylePrivate::fallbackStyle());
+ qCDebug(lcQtQuickControlsStylePlugin) << "style:" << QQuickStyle::name() << "effective style:" << styleName
+ << "fallback style:" << QQuickStylePrivate::fallbackStyle() << "effective fallback style:" << fallbackStyleName;
+
+ createTheme(styleName);
+
+ // If the style is Default, we don't need to register the fallback because the Default style
+ // provides all controls. Also, if we didn't return early here, we can get an infinite import loop
+ // when the style is set to Default.
+ if (styleName != fallbackStyleName && styleName != QLatin1String("Default")) {
+ const QString fallbackstyleUri = ::fallbackStyleUri();
+ qCDebug(lcQtQuickControlsStylePlugin) << "calling qmlRegisterModuleImport() to register fallback style with"
+ << "uri \"" << qtQuickControlsUri << "\" moduleMajor" << QQmlModuleImportModuleAny << "import" << fallbackstyleUri
+ << "importMajor" << QQmlModuleImportAuto;
+ // The fallback style must be a built-in style, so we match the version number.
+ qmlRegisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, fallbackstyleUri.toUtf8().constData(),
+ QQmlModuleImportAuto, QQmlModuleImportAuto);
+ registeredFallbackImport = true;
+ }
-void QtQuickControls2Plugin::registerTypes(const char */*uri*/)
-{
- QQuickStylePrivate::init(baseUrl());
+ const QString styleUri = ::styleUri();
+ // If the user imports QtQuick.Controls 2.15, and they're using the Material style, we should import version 2.15.
+ // However, if they import QtQuick.Controls 2.15, but are using a custom style, we want to use the latest version
+ // number of their style.
+ const int importMajor = !QQuickStylePrivate::isCustomStyle() ? QQmlModuleImportAuto : QQmlModuleImportLatest;
+ qCDebug(lcQtQuickControlsStylePlugin).nospace() << "calling qmlRegisterModuleImport() to register primary style with"
+ << " uri \"" << qtQuickControlsUri << "\" moduleMajor " << importMajor << " import " << styleUri
+ << " importMajor " << importMajor;
+ qmlRegisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, styleUri.toUtf8().constData(), importMajor);
const QString style = QQuickStyle::name();
if (!style.isEmpty())
- QFileSelectorPrivate::addStatics(QStringList() << style.toLower());
+ QFileSelectorPrivate::addStatics(QStringList() << style);
}
void QtQuickControls2Plugin::unregisterTypes()
{
+ qCDebug(lcQtQuickControlsStylePlugin) << "unregisterTypes() called";
+
+ if (registeredFallbackImport) {
+ const QString fallbackStyleUri = ::fallbackStyleUri();
+ qmlUnregisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, fallbackStyleUri.toUtf8().constData(),
+ QQmlModuleImportAuto, QQmlModuleImportAuto);
+ }
+
+ const QString primary = QQuickStylePrivate::effectiveStyleName(QQuickStyle::name());
+ const QString styleUri = ::styleUri();
+ const int importMajor = !QQuickStylePrivate::isCustomStyle() ? QQmlModuleImportAuto : QQmlModuleImportLatest;
+ qmlUnregisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, styleUri.toUtf8().constData(), importMajor);
+
QQuickStylePrivate::reset();
}
-void QtQuickControls2Plugin::init()
-{
- const QString style = QQuickStyle::name();
- QQuickTheme *theme = createTheme(style.isEmpty() ? QLatin1String("Default") : style);
+/*!
+ \internal
- // load the style's plugins to get access to its resources and initialize the theme
- QList<QQuickStylePlugin *> stylePlugins = loadStylePlugins();
- for (QQuickStylePlugin *stylePlugin : stylePlugins)
- stylePlugin->initializeTheme(theme);
- qDeleteAll(stylePlugins);
-}
+ Responsible for setting the font and palette settings that were specified in the
+ qtquickcontrols2.conf file.
-QList<QQuickStylePlugin *> QtQuickControls2Plugin::loadStylePlugins()
-{
- QList<QQuickStylePlugin *> stylePlugins;
-
- QFileInfo fileInfo = QQmlFile::urlToLocalFileOrQrc(resolvedUrl(QStringLiteral("qmldir")));
- if (fileInfo.exists() && fileInfo.path() != QQmlFile::urlToLocalFileOrQrc(baseUrl())) {
- QFile file(fileInfo.filePath());
- if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
- QQmlDirParser parser;
- parser.parse(QString::fromUtf8(file.readAll()));
- if (!parser.hasError()) {
-#ifdef QT_STATIC
- const auto plugins = QPluginLoader::staticInstances();
- for (QObject *instance : plugins) {
- QQuickStylePlugin *stylePlugin = qobject_cast<QQuickStylePlugin *>(instance);
- if (!stylePlugin || !parser.classNames().contains(QLatin1String(instance->metaObject()->className())))
- continue;
- stylePlugins += stylePlugin;
- }
-#elif QT_CONFIG(library)
- QPluginLoader loader;
- const auto plugins = parser.plugins();
- for (const QQmlDirParser::Plugin &plugin : plugins) {
- QDir dir = fileInfo.dir();
- if (!plugin.path.isEmpty() && !dir.cd(plugin.path))
- continue;
- QString filePath = dir.filePath(plugin.name);
-#if defined(Q_OS_MACOS) && defined(QT_DEBUG)
- // Avoid mismatching plugins on macOS so that we don't end up loading both debug and
- // release versions of the same Qt libraries (due to the plugin's dependencies).
- filePath += QStringLiteral("_debug");
-#endif // Q_OS_MACOS && QT_DEBUG
-#if defined(Q_OS_WIN) && defined(QT_DEBUG)
- // Debug versions of plugins have a "d" prefix on Windows.
- filePath += QLatin1Char('d');
-#endif // Q_OS_WIN && QT_DEBUG
- loader.setFileName(filePath);
- QQuickStylePlugin *stylePlugin = qobject_cast<QQuickStylePlugin *>(loader.instance());
- if (stylePlugin)
- stylePlugins += stylePlugin;
- }
-#endif
- }
- }
- }
- return stylePlugins;
-}
+ Style-specific settings (e.g. Variant=Dense) are read in the constructor of the
+ appropriate style plugin (e.g. QtQuickControls2MaterialStylePlugin).
+ Implicit style-specific font and palette values are assigned in the relevant theme
+ (e.g. QQuickMaterialTheme).
+*/
QQuickTheme *QtQuickControls2Plugin::createTheme(const QString &name)
{
+ qCDebug(lcQtQuickControlsStylePlugin) << "creating QQuickTheme instance to be initialized by style-specific theme of" << name;
+
QQuickTheme *theme = new QQuickTheme;
#if QT_CONFIG(settings)
QQuickThemePrivate *p = QQuickThemePrivate::get(theme);
diff --git a/src/imports/controls/universal/qmldir b/src/imports/controls/universal/qmldir
index 28bd5706..e2faf020 100644
--- a/src/imports/controls/universal/qmldir
+++ b/src/imports/controls/universal/qmldir
@@ -1,7 +1,7 @@
module QtQuick.Controls.Universal
plugin qtquickcontrols2universalstyleplugin
classname QtQuickControls2UniversalStylePlugin
-depends QtQuick.Controls 2.5
+import QtQuick.Controls.Default auto
# QtQuick.Controls 2.0 (originally introduced in Qt 5.7)
ApplicationWindow 2.0 ApplicationWindow.qml
diff --git a/src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp b/src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp
index ac154911..d6f7746d 100644
--- a/src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp
+++ b/src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp
@@ -34,11 +34,12 @@
**
****************************************************************************/
-#include <QtQuickControls2/private/qquickstyleplugin_p.h>
-
#include "qquickuniversalstyle_p.h"
#include "qquickuniversaltheme_p.h"
+#include <QtQuickControls2/private/qquickstyleplugin_p.h>
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
+
QT_BEGIN_NAMESPACE
class QtQuickControls2UniversalStylePlugin : public QQuickStylePlugin
@@ -50,12 +51,14 @@ public:
QtQuickControls2UniversalStylePlugin(QObject *parent = nullptr);
QString name() const override;
- void initializeTheme(QQuickTheme *theme) override;
+
+ void registerTypes(const char *uri) override;
+
+ QQuickUniversalTheme theme;
};
QtQuickControls2UniversalStylePlugin::QtQuickControls2UniversalStylePlugin(QObject *parent) : QQuickStylePlugin(parent)
{
- QQuickUniversalStyle::initGlobals();
}
QString QtQuickControls2UniversalStylePlugin::name() const
@@ -63,9 +66,12 @@ QString QtQuickControls2UniversalStylePlugin::name() const
return QStringLiteral("Universal");
}
-void QtQuickControls2UniversalStylePlugin::initializeTheme(QQuickTheme *theme)
+void QtQuickControls2UniversalStylePlugin::registerTypes(const char *uri)
{
- QQuickUniversalTheme::initialize(theme);
+ QQuickStylePlugin::registerTypes(uri);
+
+ QQuickUniversalStyle::initGlobals();
+ theme.initialize(QQuickTheme::instance());
}
QT_END_NAMESPACE