aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/quickcontrols2/gallery/gallery.cpp1
-rw-r--r--examples/quickcontrols2/gallery/gallery.qml2
-rw-r--r--src/quickcontrols2/qquickstyle.cpp47
-rw-r--r--src/quickcontrols2/qquickstyle.h1
-rw-r--r--src/quickcontrols2/qquickstyle_p.h1
-rw-r--r--tests/auto/qquickstyle/tst_qquickstyle.cpp8
6 files changed, 54 insertions, 6 deletions
diff --git a/examples/quickcontrols2/gallery/gallery.cpp b/examples/quickcontrols2/gallery/gallery.cpp
index 90b63cac..bfbdb49c 100644
--- a/examples/quickcontrols2/gallery/gallery.cpp
+++ b/examples/quickcontrols2/gallery/gallery.cpp
@@ -60,6 +60,7 @@ int main(int argc, char *argv[])
QQuickStyle::setStyle(settings.value("style").toString());
QQmlApplicationEngine engine;
+ engine.rootContext()->setContextProperty("availableStyles", QQuickStyle::availableStyles());
engine.load(QUrl("qrc:/gallery.qml"));
if (engine.rootObjects().isEmpty())
return -1;
diff --git a/examples/quickcontrols2/gallery/gallery.qml b/examples/quickcontrols2/gallery/gallery.qml
index 89c0c607..c68765b5 100644
--- a/examples/quickcontrols2/gallery/gallery.qml
+++ b/examples/quickcontrols2/gallery/gallery.qml
@@ -256,7 +256,7 @@ ApplicationWindow {
ComboBox {
id: styleBox
property int styleIndex: -1
- model: ["Default", "Material", "Universal"]
+ model: availableStyles
Component.onCompleted: {
styleIndex = find(settings.style, Qt.MatchFixedString)
if (styleIndex !== -1)
diff --git a/src/quickcontrols2/qquickstyle.cpp b/src/quickcontrols2/qquickstyle.cpp
index f4fc1764..c8a3f19a 100644
--- a/src/quickcontrols2/qquickstyle.cpp
+++ b/src/quickcontrols2/qquickstyle.cpp
@@ -178,11 +178,9 @@ struct QQuickStyleSpec
if (QGuiApplication::instance()) {
if (!custom) {
- const QString targetPath = QStringLiteral("QtQuick/Controls.2");
- const QStringList importPaths = QQmlEngine().importPathList();
-
- for (const QString &importPath : importPaths) {
- QString stylePath = findStyle(importPath + QLatin1Char('/') + targetPath, style);
+ const QStringList stylePaths = QQuickStylePrivate::stylePaths();
+ for (const QString &path : stylePaths) {
+ QString stylePath = findStyle(path, style);
if (!stylePath.isEmpty()) {
style = stylePath;
resolved = true;
@@ -212,6 +210,20 @@ struct QQuickStyleSpec
Q_GLOBAL_STATIC(QQuickStyleSpec, styleSpec)
+QStringList QQuickStylePrivate::stylePaths()
+{
+ const QString targetPath = QStringLiteral("QtQuick/Controls.2");
+ const QStringList importPaths = QQmlEngine().importPathList();
+
+ QStringList paths;
+ for (const QString &importPath : importPaths) {
+ QDir dir(importPath);
+ if (dir.cd(targetPath))
+ paths += dir.absolutePath();
+ }
+ return paths;
+}
+
QString QQuickStylePrivate::fallbackStyle()
{
return styleSpec()->fallbackStyle;
@@ -307,4 +319,29 @@ void QQuickStyle::setFallbackStyle(const QString &style)
styleSpec()->setFallbackStyle(style, "QQuickStyle::setFallbackStyle()");
}
+/*!
+ \since 5.9
+ Returns the names of the available built-in styles.
+
+ \note The method must be called \b after creating an instance of QGuiApplication.
+*/
+QStringList QQuickStyle::availableStyles()
+{
+ QStringList styles;
+ if (!QGuiApplication::instance()) {
+ qWarning() << "ERROR: QQuickStyle::availableStyles() must be called after creating an instance of QGuiApplication.";
+ return styles;
+ }
+
+ const QStringList stylePaths = QQuickStylePrivate::stylePaths();
+ for (const QString &path : stylePaths) {
+ QDir dir(path);
+ styles += dir.entryList(QStringList(), QDir::Dirs | QDir::NoDotAndDotDot);
+ styles.removeAll(QStringLiteral("designer"));
+ }
+ styles.prepend(QStringLiteral("Default"));
+ styles.removeDuplicates();
+ return styles;
+}
+
QT_END_NAMESPACE
diff --git a/src/quickcontrols2/qquickstyle.h b/src/quickcontrols2/qquickstyle.h
index d2e7faf1..4260411e 100644
--- a/src/quickcontrols2/qquickstyle.h
+++ b/src/quickcontrols2/qquickstyle.h
@@ -50,6 +50,7 @@ public:
static QString path();
static void setStyle(const QString &style);
static void setFallbackStyle(const QString &style);
+ static QStringList availableStyles();
};
QT_END_NAMESPACE
diff --git a/src/quickcontrols2/qquickstyle_p.h b/src/quickcontrols2/qquickstyle_p.h
index cfe87fbb..a893d20a 100644
--- a/src/quickcontrols2/qquickstyle_p.h
+++ b/src/quickcontrols2/qquickstyle_p.h
@@ -56,6 +56,7 @@ QT_BEGIN_NAMESPACE
class Q_QUICKCONTROLS2_PRIVATE_EXPORT QQuickStylePrivate
{
public:
+ static QStringList stylePaths();
static QString fallbackStyle();
static bool isCustomStyle();
static void init(const QUrl &baseUrl);
diff --git a/tests/auto/qquickstyle/tst_qquickstyle.cpp b/tests/auto/qquickstyle/tst_qquickstyle.cpp
index 15edc67b..cc9cc75d 100644
--- a/tests/auto/qquickstyle/tst_qquickstyle.cpp
+++ b/tests/auto/qquickstyle/tst_qquickstyle.cpp
@@ -50,6 +50,7 @@ private slots:
void lookup();
void commandLineArgument();
void environmentVariables();
+ void availableStyles();
};
void tst_QQuickStyle::init()
@@ -94,6 +95,13 @@ void tst_QQuickStyle::environmentVariables()
QCOMPARE(QQuickStylePrivate::fallbackStyle(), QString("EnvVarFallbackStyle"));
}
+void tst_QQuickStyle::availableStyles()
+{
+ QStringList styles = QQuickStyle::availableStyles();
+ QVERIFY(!styles.isEmpty());
+ QCOMPARE(styles.first(), QString("Default"));
+}
+
QTEST_MAIN(tst_QQuickStyle)
#include "tst_qquickstyle.moc"