aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/imports/controls/fusion/fusion.pro2
-rw-r--r--src/imports/controls/imagine/imagine.pro2
-rw-r--r--src/imports/controls/material/material.pro3
-rw-r--r--src/imports/controls/qtquickcontrols2plugin.cpp52
-rw-r--r--src/imports/controls/universal/universal.pro3
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))