diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2016-11-09 17:06:17 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2016-11-10 11:28:10 +0000 |
commit | f5467114b789dcb33ad88105fe84bddf42436d8c (patch) | |
tree | bac248119788d47ee05e99e6f0cdf2ac0c179407 /src/quickcontrols2/qquickstyle.cpp | |
parent | d6e03b3837f369e9fc94915ef3ad649903845382 (diff) |
QQuickStyle::availableStyles()
This allows us to introduce platform-specific styles, such as the iOS
style, and make them appear correctly in the Gallery example so that we
don't have to hard-code the lists separately for different platforms.
[ChangeLog][Controls][QQuickStyle] Added availableStyles() method that
returns the list of available built-in styles.
Change-Id: Ieea88577f402cbc52a844d6777e64c6bd55c5ab9
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quickcontrols2/qquickstyle.cpp')
-rw-r--r-- | src/quickcontrols2/qquickstyle.cpp | 47 |
1 files changed, 42 insertions, 5 deletions
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 |