Sur cette page

QFileSelector Class

QFileSelector fournit un moyen pratique de sélectionner des variantes de fichiers. Plus d'informations...

En-tête : #include <QFileSelector>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core
Héritages : QObject

Fonctions publiques

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)

Description détaillée

QFileSelector permet de sélectionner des variantes de fichiers en fonction des caractéristiques de la plate-forme ou de l'appareil. Cela vous permet de développer et de déployer plus facilement une base de code contenant toutes les différentes variantes dans certaines circonstances, par exemple lorsque la variante correcte ne peut pas être déterminée au cours de l'étape de déploiement.

Utilisation de QFileSelector

Si vous utilisez toujours le même fichier, vous n'avez pas besoin d'utiliser QFileSelector.

Prenons l'exemple suivant, dans lequel vous souhaitez utiliser différents fichiers de configuration pour différentes locales. Vous pouvez sélectionner le code entre les locales de cette manière :

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);

De même, si vous souhaitez sélectionner un fichier de données différent en fonction de la plateforme cible, votre code pourrait ressembler à ceci :

    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 offre une alternative pratique à l'écriture d'un tel code standard, et dans ce dernier cas, il vous permet de commencer à utiliser une configuration spécifique à la plate-forme sans recompilation. QFileSelector permet également d'enchaîner plusieurs sélecteurs de manière pratique, par exemple en sélectionnant un fichier différent uniquement pour certaines combinaisons de plate-forme et de locale. Par exemple, pour sélectionner en fonction de la plate-forme et/ou de la locale, le code est le suivant :

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

Les fichiers à sélectionner sont placés dans des répertoires nommés avec un '+' et un nom de sélecteur. Dans l'exemple ci-dessus, vous pourriez sélectionner les configurations de plate-forme en les plaçant dans les emplacements suivants :

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

Pour trouver les fichiers sélectionnés, QFileSelector cherche dans le même répertoire que le fichier de base. S'il existe des répertoires de la forme +<sélecteur> avec un sélecteur actif, QFileSelector préférera un fichier portant le même nom dans ce répertoire au fichier de base. Ces répertoires peuvent être imbriqués pour vérifier plusieurs sélecteurs, par exemple :

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

Avec ces fichiers disponibles, vous sélectionneriez un fichier différent sur la plateforme android, mais seulement si la locale était en_GB.

Pour la gestion des erreurs dans le cas où aucun sélecteur valide n'est présent, il est recommandé d'avoir un fichier par défaut ou de gestion des erreurs dans l'emplacement du fichier de base, même si vous vous attendez à ce que les sélecteurs soient présents pour tous les déploiements.

Dans une prochaine version, certains sélecteurs pourront être marqués comme statiques au moment du déploiement et être déplacés au cours de l'étape de déploiement à titre d'optimisation. Comme les sélecteurs ont un coût en termes de performances, il est recommandé d'éviter de les utiliser dans des circonstances impliquant du code dont les performances sont critiques.

Ajout de sélecteurs

Les sélecteurs normalement disponibles sont

  • plateforme, l'une des chaînes suivantes correspondant à la plateforme sur laquelle l'application s'exécute (liste non exhaustive) : android, ios, osx, darwin, mac, macos, linux, qnx, unix, windows. Sur Linux, s'il peut être déterminé, le nom de la distribution également, comme debian, fedora ou opensuse.
  • locale, comme QLocale().name().

D'autres sélecteurs seront ajoutés à partir de la variable d'environnement QT_FILE_SELECTORS, qui, lorsqu'elle est définie, doit être un ensemble de sélecteurs séparés par des virgules. Notez que cette variable ne sera lue qu'une seule fois ; les sélecteurs peuvent ne pas être mis à jour si la variable change pendant que l'application est en cours d'exécution. L'ensemble initial de sélecteurs n'est évalué qu'une seule fois, lors de la première utilisation.

Vous pouvez également ajouter des sélecteurs supplémentaires au moment de l'exécution pour un comportement personnalisé. Ceux-ci seront utilisés dans tous les appels ultérieurs à select(). Si la liste des sélecteurs supplémentaires a été modifiée, les appels à select() utiliseront la nouvelle liste et pourront renvoyer des résultats différents.

Résolution des conflits en cas d'application de plusieurs sélecteurs

Lorsque plusieurs sélecteurs peuvent être appliqués au même fichier, le premier sélecteur correspondant est choisi. L'ordre dans lequel les sélecteurs sont vérifiés est le suivant :

  1. les sélecteurs définis via setExtraSelectors(), dans l'ordre où ils figurent dans la liste
  2. Sélecteurs dans la variable d'environnement QT_FILE_SELECTORS, de gauche à droite
  3. Locale
  4. Plate-forme

Voici un exemple qui fait intervenir plusieurs sélecteurs en même temps. Il utilise les sélecteurs de plate-forme, ainsi qu'un sélecteur supplémentaire nommé "admin", défini par l'application en fonction des informations d'identification de l'utilisateur. L'exemple est trié de manière à ce que le fichier correspondant le plus bas soit choisi si tous les sélecteurs étaient présents :

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

Comme les sélecteurs supplémentaires sont vérifiés avant la plate-forme, le fichier +admin/background.png sera choisi sous Windows lorsque le sélecteur admin est défini, et le fichier +windows/background.png sera choisi sous Windows lorsque le sélecteur admin n'est pas défini. Sous Linux, +admin/+linux/background.png sera choisi lorsque le sélecteur admin est activé, et +linux/background.png lorsqu'il ne l'est pas.

Documentation des fonctions membres

[explicit] QFileSelector::QFileSelector(QObject *parent = nullptr)

Créer une instance de QFileSelector. Cette instance aura les mêmes sélecteurs statiques que les autres instances de QFileSelector, mais aussi son propre ensemble de sélecteurs supplémentaires.

Si elle est fournie, elle aura l'adresse QObject parent .

[virtual noexcept] QFileSelector::~QFileSelector()

Détruit cette instance de sélecteur.

QStringList QFileSelector::allSelectors() const

Retourne la liste complète et ordonnée des sélecteurs utilisés par cette instance

QStringList QFileSelector::extraSelectors() const

Renvoie la liste des sélecteurs supplémentaires qui ont été ajoutés par programme à cette instance.

Voir également setExtraSelectors().

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

Cette fonction renvoie la version sélectionnée du chemin, en fonction des conditions d'exécution. Si aucun fichier sélectionnable n'est présent, elle renvoie le fichier original filePath.

Si le fichier original n'existe pas, c'est l'original filePath qui est renvoyé. Cela signifie que vous devez avoir un fichier de base sur lequel vous appuyer, vous ne pouvez pas avoir uniquement des fichiers dans des sous-répertoires sélectionnables.

Voir l'aperçu de la classe pour l'algorithme de sélection.

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

Il s'agit d'une version de commodité de select opérant sur les objets QUrl. Si le schéma n'est pas file ou qrc, filePath est renvoyé immédiatement. Sinon, la sélection est appliquée au chemin d'accès de filePath et un QUrl est renvoyé avec le chemin d'accès sélectionné et les autres parties de QUrl identiques à filePath.

Voir l'aperçu de la classe pour l'algorithme de sélection.

void QFileSelector::setExtraSelectors(const QStringList &list)

Définit l'adresse list des sélecteurs supplémentaires qui ont été ajoutés par programme à cette instance.

Ces sélecteurs sont prioritaires par rapport à ceux qui ont été ajoutés automatiquement.

Voir également extraSelectors().

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.