diff options
-rw-r--r-- | src/imports/controls/fusion/fusion.pro | 2 | ||||
-rw-r--r-- | src/imports/controls/imagine/imagine.pro | 2 | ||||
-rw-r--r-- | src/imports/controls/material/material.pro | 3 | ||||
-rw-r--r-- | src/imports/controls/qtquickcontrols2plugin.cpp | 52 | ||||
-rw-r--r-- | src/imports/controls/universal/universal.pro | 3 |
5 files changed, 56 insertions, 6 deletions
diff --git a/src/imports/controls/fusion/fusion.pro b/src/imports/controls/fusion/fusion.pro index 705157b7..4bc9fcc1 100644 --- a/src/imports/controls/fusion/fusion.pro +++ b/src/imports/controls/fusion/fusion.pro @@ -19,7 +19,7 @@ SOURCES += \ RESOURCES += \ $$PWD/qtquickcontrols2fusionstyle.qrc -CONFIG += no_cxx_module +CONFIG += no_cxx_module install_qml_files builtin_resources qtquickcompiler load(qml_plugin) requires(qtConfig(quickcontrols2-fusion)) diff --git a/src/imports/controls/imagine/imagine.pro b/src/imports/controls/imagine/imagine.pro index 10582543..2368c0a4 100644 --- a/src/imports/controls/imagine/imagine.pro +++ b/src/imports/controls/imagine/imagine.pro @@ -22,7 +22,7 @@ qtquickcontrols2imaginestyle.files += \ $$files($$PWD/images/*.webp) RESOURCES += qtquickcontrols2imaginestyle -CONFIG += no_cxx_module +CONFIG += no_cxx_module install_qml_files builtin_resources qtquickcompiler load(qml_plugin) requires(qtConfig(quickcontrols2-imagine)) diff --git a/src/imports/controls/material/material.pro b/src/imports/controls/material/material.pro index c66cdb92..c3cbb355 100644 --- a/src/imports/controls/material/material.pro +++ b/src/imports/controls/material/material.pro @@ -19,8 +19,7 @@ SOURCES += \ RESOURCES += \ $$PWD/qtquickcontrols2materialstyleplugin.qrc -!static: CONFIG += qmlcache -CONFIG += no_cxx_module +CONFIG += no_cxx_module install_qml_files builtin_resources qtquickcompiler load(qml_plugin) requires(qtConfig(quickcontrols2-material)) diff --git a/src/imports/controls/qtquickcontrols2plugin.cpp b/src/imports/controls/qtquickcontrols2plugin.cpp index 33e3cb32..e1b683e8 100644 --- a/src/imports/controls/qtquickcontrols2plugin.cpp +++ b/src/imports/controls/qtquickcontrols2plugin.cpp @@ -34,7 +34,14 @@ ** ****************************************************************************/ +#include <QtCore/qdir.h> +#include <QtCore/qfile.h> +#include <QtCore/qfileinfo.h> +#if !defined(QT_STATIC) && QT_CONFIG(library) +#include <QtCore/qlibrary.h> +#endif #include <QtCore/private/qfileselector_p.h> +#include <QtQml/private/qqmldirparser_p.h> #include <QtQuickControls2/qquickstyle.h> #include <QtQuickControls2/private/qquickchecklabel_p.h> #include <QtQuickControls2/private/qquickcolor_p.h> @@ -74,6 +81,11 @@ public: QString name() const override; QQuickTheme *createTheme() const override; + +#if !defined(QT_STATIC) && QT_CONFIG(library) +private: + void loadStylePlugin(); +#endif }; QtQuickControls2Plugin::QtQuickControls2Plugin(QObject *parent) : QQuickStylePlugin(parent) @@ -102,6 +114,11 @@ void QtQuickControls2Plugin::registerTypes(const char *uri) if (!style.isEmpty()) QFileSelectorPrivate::addStatics(QStringList() << style.toLower()); +#if !defined(QT_STATIC) && QT_CONFIG(library) + // load the style's plugin to get access to its resources + loadStylePlugin(); +#endif + qmlRegisterModule(uri, 2, QT_VERSION_MINOR - 7); // Qt 5.7->2.0, 5.8->2.1, 5.9->2.2... // QtQuick.Controls 2.0 (originally introduced in Qt 5.7) @@ -217,6 +234,41 @@ QQuickTheme *QtQuickControls2Plugin::createTheme() const return new QQuickDefaultTheme; } +#if !defined(QT_STATIC) && QT_CONFIG(library) +void QtQuickControls2Plugin::loadStylePlugin() +{ + QFileInfo fileInfo = resolvedUrl(QStringLiteral("qmldir")).toLocalFile(); + if (!fileInfo.exists() || fileInfo.path() == baseUrl().toLocalFile()) + return; + + QFile file(fileInfo.filePath()); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) + return; + + QQmlDirParser parser; + parser.parse(QString::fromUtf8(file.readAll())); + if (parser.hasError()) + return; + + QLibrary lib; + lib.setLoadHints(QLibrary::PreventUnloadHint); + 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 + lib.setFileName(filePath); + lib.load(); + } +} +#endif // !QT_STATIC && QT_CONFIG(library) + QT_END_NAMESPACE #include "qtquickcontrols2plugin.moc" diff --git a/src/imports/controls/universal/universal.pro b/src/imports/controls/universal/universal.pro index bce86bac..399de032 100644 --- a/src/imports/controls/universal/universal.pro +++ b/src/imports/controls/universal/universal.pro @@ -19,8 +19,7 @@ SOURCES += \ RESOURCES += \ $$PWD/qtquickcontrols2universalstyleplugin.qrc -!static: CONFIG += qmlcache -CONFIG += no_cxx_module +CONFIG += no_cxx_module install_qml_files builtin_resources qtquickcompiler load(qml_plugin) requires(qtConfig(quickcontrols2-universal)) |