aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMitch Curtis <mitch.curtis@qt.io>2018-06-21 11:01:53 +0200
committerMitch Curtis <mitch.curtis@qt.io>2018-06-25 08:08:49 +0000
commit77c0ef6aafcdcc52cb2d07ce085ee4b3574c36d9 (patch)
tree7224acb36115d9dd02a17f89db081b89fc6317e2
parent7fec7105b7f6119135aafd6f9ee609128125d594 (diff)
QQuickStyle::addStylePath(): fix support for qrc paths
The code lacked handling for the "qrc" scheme. Task-number: QTBUG-68222 Change-Id: Ia0dfdb748b8bdb40c893375b9de77bd8c05986b6 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
-rw-r--r--src/quickcontrols2/qquickstyle.cpp2
-rw-r--r--tests/auto/qquickstyle/qquickstyle.pro8
-rw-r--r--tests/auto/qquickstyle/qrcStyles1/QrcStyle1/Button.qml2
-rw-r--r--tests/auto/qquickstyle/qrcStyles2/QrcStyle2/Button.qml2
-rw-r--r--tests/auto/qquickstyle/tst_qquickstyle.cpp39
5 files changed, 53 insertions, 0 deletions
diff --git a/src/quickcontrols2/qquickstyle.cpp b/src/quickcontrols2/qquickstyle.cpp
index a7349915..9f101273 100644
--- a/src/quickcontrols2/qquickstyle.cpp
+++ b/src/quickcontrols2/qquickstyle.cpp
@@ -589,6 +589,8 @@ void QQuickStyle::addStylePath(const QString &path)
if (url.isRelative() || url.scheme() == QLatin1String("file")
|| (url.scheme().length() == 1 && QFile::exists(path)) ) { // windows path
styleSpec()->customStylePaths.prepend(QDir(path).canonicalPath());
+ } else if (url.scheme() == QLatin1String("qrc")) {
+ styleSpec()->customStylePaths.prepend(QLatin1Char(':') + url.path());
} else {
styleSpec()->customStylePaths.prepend(path);
}
diff --git a/tests/auto/qquickstyle/qquickstyle.pro b/tests/auto/qquickstyle/qquickstyle.pro
index da74b6cd..983e5438 100644
--- a/tests/auto/qquickstyle/qquickstyle.pro
+++ b/tests/auto/qquickstyle/qquickstyle.pro
@@ -10,3 +10,11 @@ QT_PRIVATE += core-private gui-private quickcontrols2-private
include (../shared/util.pri)
TESTDATA = $$PWD/data/*
+
+qrcStyles1.files = $$files(qrcStyles1/QrcStyle1/*.qml)
+qrcStyles1.prefix = /
+RESOURCES += qrcStyles1
+
+qrcStyles2.files = $$files(qrcStyles2/QrcStyle2/*.qml)
+qrcStyles2.prefix = /
+RESOURCES += qrcStyles2
diff --git a/tests/auto/qquickstyle/qrcStyles1/QrcStyle1/Button.qml b/tests/auto/qquickstyle/qrcStyles1/QrcStyle1/Button.qml
new file mode 100644
index 00000000..5b08222c
--- /dev/null
+++ b/tests/auto/qquickstyle/qrcStyles1/QrcStyle1/Button.qml
@@ -0,0 +1,2 @@
+import QtQuick.Templates 2.0 as T
+T.Button { }
diff --git a/tests/auto/qquickstyle/qrcStyles2/QrcStyle2/Button.qml b/tests/auto/qquickstyle/qrcStyles2/QrcStyle2/Button.qml
new file mode 100644
index 00000000..5b08222c
--- /dev/null
+++ b/tests/auto/qquickstyle/qrcStyles2/QrcStyle2/Button.qml
@@ -0,0 +1,2 @@
+import QtQuick.Templates 2.0 as T
+T.Button { }
diff --git a/tests/auto/qquickstyle/tst_qquickstyle.cpp b/tests/auto/qquickstyle/tst_qquickstyle.cpp
index 555e1686..324d0b08 100644
--- a/tests/auto/qquickstyle/tst_qquickstyle.cpp
+++ b/tests/auto/qquickstyle/tst_qquickstyle.cpp
@@ -55,6 +55,8 @@ private slots:
void commandLineArgument();
void environmentVariables();
void availableStyles();
+ void qrcStylePaths_data();
+ void qrcStylePaths();
private:
void loadControls();
@@ -167,6 +169,43 @@ void tst_QQuickStyle::availableStyles()
}
}
+void tst_QQuickStyle::qrcStylePaths_data()
+{
+ QTest::addColumn<QString>("stylePath");
+ QTest::addColumn<QString>("expectedStyleName");
+
+ QTest::addRow("qrc:/qrcStyles1") << QString::fromLatin1("qrc:/qrcStyles1") << QString::fromLatin1("QrcStyle1");
+ QTest::addRow(":/qrcStyles2") << QString::fromLatin1(":/qrcStyles2") << QString::fromLatin1("QrcStyle2");
+}
+
+void tst_QQuickStyle::qrcStylePaths()
+{
+ QFETCH(QString, stylePath);
+ QFETCH(QString, expectedStyleName);
+
+ QQuickStyle::addStylePath(stylePath);
+
+ const QStringList paths = QQuickStylePrivate::stylePaths();
+ QString expectedStylePath = stylePath;
+ if (expectedStylePath.startsWith(QLatin1String("qrc")))
+ expectedStylePath.remove(0, 3);
+ if (!paths.contains(expectedStylePath)) {
+ QString message;
+ QDebug stream(&message);
+ stream.nospace() << "QQuickStylePrivate::stylePaths() doesn't contain " << expectedStylePath << ":\n" << paths;
+ QFAIL(qPrintable(message));
+ }
+
+ const QStringList styles = QQuickStyle::availableStyles();
+ QVERIFY(!styles.isEmpty());
+ if (!styles.contains(expectedStyleName)) {
+ QString message;
+ QDebug stream(&message);
+ stream.nospace() << "QQuickStyle::availableStyles() doesn't contain " << expectedStyleName << ":\n" << styles;
+ QFAIL(qPrintable(message));
+ }
+}
+
QTEST_MAIN(tst_QQuickStyle)
#include "tst_qquickstyle.moc"