Make variant selection possible if base is missing

[ChangeLog][QtCore][QFileSelector] Removed the requirement for an unused
default base file in case you want to load only a variant.

When the base file (e.g. /image.jpg) was missing, no selectors were
considered and it was not possible to load variants of this file (e.g.
/+android/image.jpg, /+android/+tablet/image.jpg) without specifying the
directory as well.

As a work around, one previously had to place a default file in
the base location, which is undesirable in some cases because:
1. The extra file consumes unnecessary space.
2. It is impossible to encapsulate platform-specific implementation
   details by hiding files in a subdirectory.

Task-number: QTBUG-51230
Change-Id: I4c7f9ec952bff6e5b7738d8cabe3c762c208a38e
Reviewed-by: Robin Burchell <robin.burchell@crimson.no>
bb10
Sebastian Lösch 2016-11-01 11:16:32 +01:00 committed by André Klitzing
parent 04dc59d989
commit da0241a2e7
2 changed files with 4 additions and 7 deletions

View File

@ -133,9 +133,9 @@ QFileSelectorPrivate::QFileSelectorPrivate()
With those files available, you would select a different file on the android platform,
but only if the locale was en_GB.
QFileSelector will not attempt to select if the base file does not exist. For error handling in
the case no valid selectors are present, it is recommended to have a default or error-handling
file in the base file location even if you expect selectors to be present for all deployments.
For error handling in the case no valid selectors are present, it is recommended to have a default or
error-handling file in the base file location even if you expect selectors to be present for all
deployments.
In a future version, some may be marked as deploy-time static and be moved during the
deployment step as an optimization. As selectors come with a performance cost, it is
@ -298,9 +298,6 @@ QString QFileSelectorPrivate::select(const QString &filePath) const
{
Q_Q(const QFileSelector);
QFileInfo fi(filePath);
// If file doesn't exist, don't select
if (!fi.exists())
return filePath;
QString ret = selectionHelper(fi.path().isEmpty() ? QString() : fi.path() + QLatin1Char('/'),
fi.fileName(), q->allSelectors());

View File

@ -138,7 +138,7 @@ void tst_QFileSelector::basicTest_data()
<< QString(":/extras/test2");
QTest::newRow("custom1-withselector-nobasefile") << QString(":/extras/test3") << (QStringList() << custom1)
<< QString(":/extras/test3");
<< QString(":/extras/+custom1/test3");
QString custom2("custom2");
QString custom3("custom3");