diff options
author | Mitch Curtis <mitch.curtis@qt.io> | 2018-06-21 11:01:53 +0200 |
---|---|---|
committer | Mitch Curtis <mitch.curtis@qt.io> | 2018-06-25 08:08:49 +0000 |
commit | 77c0ef6aafcdcc52cb2d07ce085ee4b3574c36d9 (patch) | |
tree | 7224acb36115d9dd02a17f89db081b89fc6317e2 | |
parent | 7fec7105b7f6119135aafd6f9ee609128125d594 (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.cpp | 2 | ||||
-rw-r--r-- | tests/auto/qquickstyle/qquickstyle.pro | 8 | ||||
-rw-r--r-- | tests/auto/qquickstyle/qrcStyles1/QrcStyle1/Button.qml | 2 | ||||
-rw-r--r-- | tests/auto/qquickstyle/qrcStyles2/QrcStyle2/Button.qml | 2 | ||||
-rw-r--r-- | tests/auto/qquickstyle/tst_qquickstyle.cpp | 39 |
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" |