En esta página

QFileSelector Class

QFileSelector proporciona una forma cómoda de seleccionar variantes de archivos. Más...

Cabecera: #include <QFileSelector>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Hereda: QObject

Funciones Públicas

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)

Descripción Detallada

QFileSelector es una conveniencia para seleccionar variantes de archivos basados en características de plataforma o dispositivo. Esto te permite desarrollar y desplegar un código base que contenga todas las diferentes variantes más fácilmente en algunas circunstancias, como cuando la variante correcta no puede ser determinada durante el paso de despliegue.

Uso de QFileSelector

Si siempre utiliza el mismo archivo no necesita utilizar QFileSelector.

Considere el siguiente ejemplo de uso, donde desea utilizar diferentes archivos de configuración en diferentes locales. Usted podría seleccionar código entre locales así:

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 manera similar, si quieres seleccionar un archivo de datos diferente basado en la plataforma de destino, tu código podría ser algo como esto:

    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 provee una alternativa conveniente a escribir tal código boilerplate, y en el último caso te permite comenzar a usar una configuración específica de plataforma sin una recompilación. QFileSelector tambien permite encadenar multiples selectores de una manera conveniente, por ejemplo seleccionando un archivo diferente solo en ciertas combinaciones de plataforma y locale. Por ejemplo, para seleccionar basado en plataforma y/o locale, el código es el siguiente:

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

Los archivos a seleccionar se colocan en directorios nombrados con un '+' y un nombre de selector. En el ejemplo anterior podrías tener las configuraciones de plataforma seleccionadas colocándolas en las siguientes ubicaciones:

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

Para encontrar los archivos seleccionados, QFileSelector busca en el mismo directorio que el archivo base. Si hay algún directorio de la forma +<selector> con un selector activo, QFileSelector preferirá un archivo con el mismo nombre de ese directorio sobre el archivo base. Estos directorios pueden anidarse para comprobar múltiples selectores, por ejemplo:

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

Con esos archivos disponibles, seleccionaría un archivo diferente en la plataforma android, pero sólo si la configuración regional fuera en_GB.

Para la gestión de errores en el caso de que no haya selectores válidos, se recomienda tener un archivo por defecto o de gestión de errores en la ubicación del archivo base, incluso si se espera que los selectores estén presentes en todas las implementaciones.

En una versión futura, algunos pueden ser marcados como estáticos en tiempo de despliegue y ser movidos durante el paso de despliegue como una optimización. Como los selectores tienen un coste de rendimiento, se recomienda evitar su uso en circunstancias en las que el rendimiento del código sea crítico.

Añadir selectores

Los selectores normalmente disponibles son

  • plataforma, cualquiera de las siguientes cadenas que coincidan con la plataforma en la que se ejecuta la aplicación (lista no exhaustiva): android, ios, osx, darwin, mac, macos, linux, qnx, unix, windows. En Linux, si se puede determinar, también el nombre de la distribución, como debian, fedora u opensuse.
  • locale, igual que QLocale().name().

Se añadirán más selectores desde la variable de entorno QT_FILE_SELECTORS, que cuando se establezca debe ser un conjunto de selectores separados por comas. Tenga en cuenta que esta variable sólo se leerá una vez; los selectores no se actualizarán si la variable cambia mientras se ejecuta la aplicación. El conjunto inicial de selectores se evalúa sólo una vez, en el primer uso.

También puede añadir selectores adicionales en tiempo de ejecución para un comportamiento personalizado. Estos se utilizarán en cualquier llamada futura a select(). Si la lista de selectores adicionales ha sido modificada, las llamadas a select() utilizarán la nueva lista y pueden devolver resultados diferentes.

Resolución de conflictos cuando se aplican varios selectores

Cuando pueden aplicarse varios selectores al mismo archivo, se elige el primer selector coincidente. El orden en que se comprueban los selectores es el siguiente

  1. Selectores establecidos mediante setExtraSelectors(), en el orden en que aparecen en la lista
  2. Selectores en la variable de entorno QT_FILE_SELECTORS, de izquierda a derecha
  3. Configuración regional
  4. Plataforma

He aquí un ejemplo en el que varios selectores coinciden al mismo tiempo. Utiliza selectores de plataforma, además de un selector extra llamado "admin" que es establecido por la aplicación basándose en las credenciales del usuario. El ejemplo está ordenado de forma que, si todos los selectores estuvieran presentes, se elegiría el archivo con menor coincidencia:

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

Dado que los selectores adicionales se comprueban antes que la plataforma, +admin/background.png se elegirá en Windows cuando el selector admin esté activado, y +windows/background.png se elegirá en Windows cuando el selector admin no esté activado. En Linux, se elegirá +admin/+linux/background.png cuando admin esté activado, y +linux/background.png cuando no lo esté.

Documentación de las funciones miembro

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

Crea una instancia de QFileSelector. Esta instancia tendrá los mismos selectores estáticos que otras instancias QFileSelector, pero su propio conjunto de selectores extra.

Si se proporciona, tendrá el QObject dado parent.

[virtual noexcept] QFileSelector::~QFileSelector()

Destruye esta instancia del selector.

QStringList QFileSelector::allSelectors() const

Devuelve la lista completa y ordenada de selectores utilizados por esta instancia

QStringList QFileSelector::extraSelectors() const

Devuelve la lista de selectores adicionales que se han añadido mediante programación a esta instancia.

Véase también setExtraSelectors().

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

Esta función devuelve la versión seleccionable de la ruta, basándose en las condiciones en tiempo de ejecución. Si no existen archivos seleccionables, devuelve el original filePath.

Si el fichero original no existe, devuelve el original filePath. Esto significa que debe tener un archivo base al que recurrir, no puede tener sólo archivos en subdirectorios seleccionables.

Consulte el resumen de la clase para conocer el algoritmo de selección.

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

Esta es una versión de conveniencia de select que opera sobre objetos QUrl. Si el esquema no es file o qrc, se devuelve filePath inmediatamente. De lo contrario, la selección se aplica a la ruta de filePath y se devuelve un QUrl con la ruta seleccionada y otras partes de QUrl iguales a filePath.

Consulte el resumen de la clase para conocer el algoritmo de selección.

void QFileSelector::setExtraSelectors(const QStringList &list)

Establece la dirección list de los selectores adicionales que se han añadido mediante programación a esta instancia.

Estos selectores tienen prioridad sobre los que se hayan recogido automáticamente.

Véase también 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.