QFileSelector Class

QFileSelector bietet eine bequeme Möglichkeit zur Auswahl von Dateivarianten. Mehr...

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

Öffentliche Funktionen

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)

Detaillierte Beschreibung

QFileSelector ist eine praktische Funktion zur Auswahl von Dateivarianten auf der Grundlage von Plattform- oder Geräteeigenschaften. Dadurch können Sie eine Codebasis entwickeln und bereitstellen, die alle verschiedenen Varianten enthält, was unter bestimmten Umständen einfacher ist, z. B. wenn die richtige Variante während des Bereitstellungsschritts nicht ermittelt werden kann.

Verwendung von QFileSelector

Wenn Sie immer dieselbe Datei verwenden, brauchen Sie QFileSelector nicht zu benutzen.

Betrachten Sie das folgende Anwendungsbeispiel, bei dem Sie verschiedene Einstellungsdateien in verschiedenen Sprachumgebungen verwenden möchten. Sie könnten den Code zwischen den Gebietsschemata wie folgt auswählen:

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

Wenn Sie je nach Zielplattform eine andere Datendatei auswählen möchten, könnte Ihr Code in etwa so aussehen:

    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 bietet eine bequeme Alternative zum Schreiben eines solchen Boilerplate-Codes und ermöglicht im letzteren Fall die Verwendung einer plattformspezifischen Konfiguration ohne Neukompilierung. QFileSelector erlaubt auch die Verkettung mehrerer Selektoren auf bequeme Art und Weise, zum Beispiel die Auswahl einer anderen Datei nur bei bestimmten Kombinationen von Plattform und Gebietsschema. Um zum Beispiel nach Plattform und/oder Gebietsschema auszuwählen, sieht der Code wie folgt aus:

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

Die auszuwählenden Dateien werden in Verzeichnissen abgelegt, die mit einem '+' und einem Selektornamen benannt werden. Im obigen Beispiel könnten Sie die Plattformkonfigurationen auswählen, indem Sie sie an den folgenden Orten ablegen:

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

Um ausgewählte Dateien zu finden, sucht QFileSelector im selben Verzeichnis wie die Basisdatei. Wenn es irgendwelche Verzeichnisse der Form +<selector> mit einem aktiven Selektor gibt, wird QFileSelector eine Datei mit dem gleichen Dateinamen aus diesem Verzeichnis der Basisdatei vorziehen. Diese Verzeichnisse können verschachtelt werden, um z.B. mehrere Selektoren zu überprüfen:

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

Wenn diese Dateien verfügbar sind, würden Sie eine andere Datei auf der Android-Plattform auswählen, aber nur, wenn das Gebietsschema en_GB ist.

Für die Fehlerbehandlung im Falle, dass keine gültigen Selektoren vorhanden sind, wird empfohlen, eine Standard- oder Fehlerbehandlungsdatei am Speicherort der Basisdatei zu haben, selbst wenn Sie erwarten, dass Selektoren für alle Bereitstellungen vorhanden sind.

In einer zukünftigen Version können einige Selektoren als statische Selektoren markiert und während des Deployment-Schrittes als Optimierung verschoben werden. Da Selektoren mit Leistungseinbußen verbunden sind, wird empfohlen, ihre Verwendung in Situationen zu vermeiden, in denen die Leistung von Code kritisch ist.

Hinzufügen von Selektoren

Normalerweise verfügbare Selektoren sind

  • platform, eine der folgenden Zeichenfolgen, die der Plattform entsprechen, auf der die Anwendung läuft (Liste nicht vollständig): android, ios, osx, darwin, mac, macos, linux, qnx, unix, windows. Bei Linux, wenn es bestimmt werden kann, auch der Name der Distribution, wie Debian, Fedora oder Opensuse.
  • locale, wie QLocale().name().

Weitere Selektoren werden von der QT_FILE_SELECTORS Umgebungsvariable hinzugefügt, die, wenn sie gesetzt ist, eine Reihe von durch Kommata getrennten Selektoren sein sollte. Beachten Sie, dass diese Variable nur einmal gelesen wird; die Selektoren können nicht aktualisiert werden, wenn sich die Variable ändert, während die Anwendung läuft. Der anfängliche Satz von Selektoren wird nur einmal, bei der ersten Verwendung, ausgewertet.

Sie können auch zur Laufzeit zusätzliche Selektoren für ein benutzerdefiniertes Verhalten hinzufügen. Diese werden in allen zukünftigen Aufrufen von select() verwendet. Wenn die Liste der zusätzlichen Selektoren geändert wurde, verwenden die Aufrufe von select() die neue Liste und geben möglicherweise ein anderes Ergebnis zurück.

Konfliktlösung bei Anwendung mehrerer Selektoren

Wenn mehrere Selektoren auf dieselbe Datei angewendet werden können, wird der erste passende Selektor ausgewählt. Die Selektoren werden in der folgenden Reihenfolge geprüft:

  1. Selektoren, die über setExtraSelectors() gesetzt wurden, in der Reihenfolge, in der sie in der Liste stehen
  2. Selektoren in der Umgebungsvariablen QT_FILE_SELECTORS, von links nach rechts
  3. Gebietsschema
  4. Plattform

Hier ist ein Beispiel mit mehreren Selektoren, die gleichzeitig passen. Es verwendet Plattformselektoren, und ein zusätzlicher Selektor namens "admin" wird von der Anwendung auf der Grundlage der Benutzeranmeldeinformationen gesetzt. Das Beispiel ist so sortiert, dass die Datei mit der geringsten Übereinstimmung ausgewählt würde, wenn alle Selektoren vorhanden wären:

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

Da die zusätzlichen Selektoren vor der Plattform überprüft werden, wird unter Windows +admin/background.png gewählt, wenn der Admin-Selektor gesetzt ist, und +windows/background.png, wenn der Admin-Selektor nicht gesetzt ist. Unter Linux wird +admin/+linux/background.png gewählt, wenn der Admin-Selektor gesetzt ist, und +linux/background.png, wenn er nicht gesetzt ist.

Dokumentation der Mitgliedsfunktionen

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

Erstellen Sie eine QFileSelector-Instanz. Diese Instanz hat die gleichen statischen Selektoren wie andere QFileSelector-Instanzen, aber einen eigenen Satz von zusätzlichen Selektoren.

Falls angegeben, hat sie die angegebene QObject parent .

[virtual noexcept] QFileSelector::~QFileSelector()

Zerstört diese Selektorinstanz.

QStringList QFileSelector::allSelectors() const

Gibt die vollständige, geordnete Liste der von dieser Instanz verwendeten Selektoren zurück

QStringList QFileSelector::extraSelectors() const

Gibt die Liste der zusätzlichen Selektoren zurück, die programmatisch zu dieser Instanz hinzugefügt wurden.

Siehe auch setExtraSelectors().

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

Diese Funktion gibt die ausgewählte Version des Pfades zurück, basierend auf den Bedingungen zur Laufzeit. Wenn keine auswählbaren Dateien vorhanden sind, wird das Original filePath zurückgegeben.

Ist die Originaldatei nicht vorhanden, wird das Original filePath zurückgegeben. Dies bedeutet, dass Sie eine Basisdatei haben müssen, auf die Sie zurückgreifen können, Sie können nicht nur Dateien in auswählbaren Unterverzeichnissen haben.

Zum Auswahlalgorithmus siehe die Klassenübersicht.

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

Dies ist eine praktische Version von select, die mit QUrl Objekten arbeitet. Wenn das Schema nicht file oder qrc ist, wird filePath sofort zurückgegeben. Andernfalls wird die Auswahl auf den Pfad von filePath angewandt und QUrl mit dem ausgewählten Pfad und den anderen Teilen von QUrl zurückgegeben, die mit filePath identisch sind.

Siehe die Klassenübersicht für den Auswahlalgorithmus.

void QFileSelector::setExtraSelectors(const QStringList &list)

Legt die list von zusätzlichen Selektoren fest, die programmatisch zu dieser Instanz hinzugefügt wurden.

Diese Selektoren haben Vorrang vor denen, die automatisch aufgenommen wurden.

Siehe auch extraSelectors().

© 2025 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.