Spec-Zone.ru › Qt 5.11

Класс QFileSelector

QFileSelector предоставляет удобный способ выбора вариантов файлов. Подробнее...

Заголовок: #include <QFileSelector>
qmake: QT += core
С момента: Qt 5.2
Наследуется от: QObject
  • Список всех членов, включая унаследованные

Открытые функции

QFileSelector(QObject *parent = nullptr)
virtual ~QFileSelector()
QStringList allSelectors() const
QStringList extraSelectors() const
QString select(const QString &filePath) const
QUrl select(const QUrl &filePath) const
void setExtraSelectors(const QStringList &list)
  • 32 открытых функции унаследованные от QObject

Дополнительные унаследованные члены

  • 1 свойство унаследованное от QObject
  • 1 открытый слот унаследованный от QObject
  • 2 сигналы унаследованные от QObject
  • 11 статические открытые члены унаследованные от QObject
  • 9 защищенные функции унаследованные от QObject

Подробное описание

QFileSelector предоставляет удобный способ выбора вариантов файлов.

QFileSelector — это утилита для выбора вариантов файлов на основе платформы или характеристик устройства. Это позволяет проще разрабатывать и развертывать один код, содержащий все разные варианты в некоторых случаях, например, когда правильный вариант нельзя определить на этапе развертывания.

Использование QFileSelector

Если вы всегда используете один и тот же файл, вам не нужно использовать QFileSelector.

Рассмотрим пример использования, где вы хотите использовать разные файлы настроек на разных языках. Вы можете выбрать код между языками так:

QString defaultsBasePath = "data/";
QString defaultsPath = defaultsBasePath + "defaults.conf";
QString localizedPath = defaultsBasePath
        + QString("%1/defaults.conf").arg(QLocale().name());
if (QFile::exists(localizedPath))
    defaultsPath = localizedPath;
QFile defaults(defaultsPath);

Аналогично, если вы хотите выбрать другой файл данных в зависимости от целевой платформы, ваш код может выглядеть примерно так:

    QString defaultsPath = "data/defaults.conf";
#if defined(Q_OS_ANDROID)
    defaultsPath = "data/android/defaults.conf";
#elif defined(Q_OS_IOS)
    defaultsPath = "data/ios/defaults.conf";
#endif
    QFile defaults(defaultsPath);

QFileSelector предоставляет удобную альтернативу написанию такого шаблонного кода, и в последнем случае позволяет начать использовать платформоспецифическую конфигурацию без перекомпиляции. QFileSelector также позволяет цепочкой объединять несколько селекторов удобным способом, например, выбирая другой файл только в определенных комбинациях платформы и языка. Например, для выбора на основе платформы и/или языка код выглядит так:

QFileSelector selector;
QFile defaultsFile(selector.select("data/defaults.conf"));

Выбираемые файлы размещаются в каталогах, именованных с помощью '+' и имен селекторов. В приведенном выше примере вы можете расположить конфигурации платформ в следующих расположениях:

data/defaults.conf
data/+android/defaults.conf
data/+ios/+en_GB/defaults.conf

Для поиска выбранных файлов QFileSelector ищет в той же директории, что и базовый файл. Если существуют каталоги вида +<селектор> с активным селектором, QFileSelector отдаст предпочтение файлу с тем же именем из этой директории перед базовым файлом. Эти каталоги могут быть вложены для проверки по нескольким селекторам, например:

images/background.png
images/+android/+en_GB/background.png

С этими файлами вы выбрали бы другой файл на платформе Android, но только если язык был en_GB.

Для обработки ошибок в случае отсутствия допустимых селекторов рекомендуется иметь файл по умолчанию или файл обработки ошибок в базовом расположении файла, даже если вы ожидаете, что селекторы будут присутствовать для всех развертываний.

В будущей версии некоторые из них могут быть помечены как статические во время развертывания и перемещены на этапе развертывания в качестве оптимизации. Поскольку селекторы имеют производительность, их следует избегать в ситуациях, связанных с критичными для производительности кодами.

Добавление селекторов

Обычно доступные селекторы

  • платформа, любая из следующих строк, соответствующих платформе, на которой работает приложение (список неполный): android, ios, osx, darwin, mac, macos, linux, qnx, unix, windows. В Linux, если это возможно определить, имя дистрибутива, например, debian, fedora или opensuse.
  • язык, такой же как QLocale().name().

Дополнительные селекторы будут добавлены из переменной среды QT_FILE_SELECTORS, которая, если установлена, должна быть набором селекторов, разделенных запятыми. Обратите внимание, что эта переменная будет прочитана только один раз; селекторы могут не обновляться, если переменная изменится во время работы приложения. Начальный набор селекторов оценивается только один раз при первом использовании.

Вы также можете добавить дополнительные селекторы во время выполнения для пользовательского поведения. Они будут использоваться во всех будущих вызовах select(). Если список дополнительных селекторов был изменен, вызовы select() будут использовать новый список и могут возвращать разные результаты.

Разрешение конфликтов при применении нескольких селекторов

Когда несколько селекторов могут применяться к одному файлу, выбирается первый совпадающий селектор. Порядок проверки селекторов:

  1. Селекторы, заданные с помощью setExtraSelectors(), в порядке их следования в списке
  2. Селекторы в переменной среды QT_FILE_SELECTORS, слева направо
  3. Язык
  4. Платформа

Вот пример, включающий несколько селекторов, совпадающих одновременно. Он использует селекторы платформы, а также дополнительный селектор с именем «admin», заданный приложением на основе учетных данных пользователя. Пример отсортирован таким образом, что наименее подходящий файл был бы выбран, если бы все селекторы были присутствовать:

images/background.png
images/+linux/background.png
images/+windows/background.png
images/+admin/background.png
images/+admin/+linux/background.png

Поскольку дополнительные селекторы проверяются перед платформой, +admin/background.png будет выбран в Windows, когда селектор «admin» установлен, и +windows/background.png будет выбран в Windows, когда селектор «admin» не установлен. В Linux, +admin/+linux/background.png будет выбран при установке «admin», и +linux/background.png - когда нет.

Документация функций-членов

QFileSelector::QFileSelector(QObject *parent = nullptr)

Создает экземпляр QFileSelector. Этот экземпляр будет иметь те же статические селекторы, что и другие экземпляры QFileSelector, но свой собственный набор дополнительных селекторов.

Если указано, он будет иметь указанный родительский объект QObject parent.

[virtual] QFileSelector::~QFileSelector()

Удаляет этот экземпляр селектора.

QStringList QFileSelector::allSelectors() const

Возвращает полный, упорядоченный список селекторов, используемых этим экземпляром

QStringList QFileSelector::extraSelectors() const

Возвращает список дополнительных селекторов, которые были добавлены программно к этому экземпляру.

См. также setExtraSelectors().

QString QFileSelector::select(const QString &filePath) const

Эта функция возвращает выбранную версию пути, основанную на условиях в момент выполнения. Если нет выбираемых файлов, возвращает исходный filePath.

Если исходный файл не существует, возвращается исходный filePath. Это означает, что у вас должен быть базовый файл для отката, вы не можете иметь только файлы в подкаталогах с выбором.

См. обзор класса для алгоритма выбора.

QUrl QFileSelector::select(const QUrl &filePath) const

Это удобная версия select, работающая с объектами QUrl. Если схема не file или qrc, filePath возвращается немедленно. В противном случае выбор применяется к пути filePath, и возвращается QUrl с выбранным путем и другими частями QUrl, такими же, как filePath.

См. обзор класса для алгоритма выбора.

void QFileSelector::setExtraSelectors(const QStringList &list)

Устанавливает список list дополнительных селекторов, которые были добавлены программно к этому экземпляру.

Эти селекторы имеют приоритет над любыми, которые были автоматически выбраны.

См. также extraSelectors().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qfileselector.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API