QFileSelector Class
QFileSelector bietet eine bequeme Möglichkeit, Dateivarianten auszuwählen. Mehr...
| Überschrift: | #include <QFileSelector> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Erbt von: | 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) |
Ausführliche Beschreibung
QFileSelector ist eine Hilfsfunktion zur Auswahl von Dateivarianten auf der Grundlage von Plattform- oder Geräteeigenschaften. Dies ermöglicht es Ihnen, unter bestimmten Umständen – beispielsweise wenn die richtige Variante während des Bereitstellungsschritts nicht ermittelt werden kann – eine einzige Codebasis zu entwickeln und bereitzustellen, die alle verschiedenen Varianten enthält.
Verwendung von QFileSelector
Wenn Sie immer dieselbe Datei verwenden, benötigen Sie QFileSelector nicht.
Betrachten Sie das folgende Anwendungsbeispiel, in dem Sie unterschiedliche Einstellungsdateien für verschiedene Sprachumgebungen verwenden möchten. Sie könnten den Code je nach Sprachumgebung 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 hingegen je nach Zielplattform eine andere Datendatei auswählen möchten, könnte Ihr Code 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 solcher Boilerplate-Codes und ermöglicht es Ihnen im letzteren Fall, eine plattformspezifische Konfiguration ohne Neukompilierung zu verwenden. QFileSelector ermöglicht zudem die bequeme Verkettung mehrerer Selektoren, um beispielsweise nur bei bestimmten Kombinationen aus Plattform und Sprachumgebung eine andere Datei auszuwählen. Um die Auswahl beispielsweise anhand der Plattform und/oder der Sprachumgebung vorzunehmen, lautet der Code wie folgt:
QFileSelector selector;
QFile defaultsFile(selector.select("data/defaults.conf"));Die auszuwählenden Dateien werden in Verzeichnissen abgelegt, deren Namen aus einem „ '+' “ und einem Selektor-Namen bestehen. Im obigen Beispiel könntest du die Plattformkonfigurationen auswählen, indem du sie an folgenden Speicherorten ablegst:
data/defaults.conf
data/+android/defaults.conf
data/+ios/+en_GB/defaults.confUm ausgewählte Dateien zu finden, sucht QFileSelector im selben Verzeichnis wie die Basisdatei. Wenn Verzeichnisse der Form +<Selektor> mit einem aktiven Selektor vorhanden sind, zieht QFileSelector eine Datei mit demselben Dateinamen aus diesem Verzeichnis der Basisdatei vor. Diese Verzeichnisse können verschachtelt werden, um mehrere Selektoren zu prüfen, zum Beispiel:
images/background.png
images/+android/+en_GB/background.pngWenn diese Dateien verfügbar sind, würden Sie auf der Android-Plattform eine andere Datei auswählen, jedoch nur, wenn die Sprachumgebung „en_GB“ ist.
Zur Fehlerbehandlung für den Fall, dass keine gültigen Selektoren vorhanden sind, wird empfohlen, eine Standard- oder Fehlerbehandlungsdatei am Speicherort der Basisdatei bereitzuhalten, selbst wenn Sie davon ausgehen, dass für alle Bereitstellungen Selektoren vorhanden sind.
In einer zukünftigen Version könnten einige als „deploy-time static“ gekennzeichnet und im Rahmen des Bereitstellungsschritts als Optimierung verschoben werden. Da Selektoren mit einem Leistungsaufwand verbunden sind, wird empfohlen, ihre Verwendung in Situationen zu vermeiden, in denen leistungskritischer Code zum Einsatz kommt.
Selektoren hinzufügen
Normalerweise verfügbare Selektoren sind
- „platform“ sowie jede der folgenden Zeichenfolgen, die mit der Plattform übereinstimmen, auf der die Anwendung ausgeführt wird (die Liste ist nicht vollständig): android, harmonyos, ios, osx, darwin, mac, macos, linux, qnx, unix, windows. Unter Linux, sofern er ermittelt werden kann, auch der Name der Distribution, wie z. B. „debian“, „fedora“ oder „opensuse“.
- locale, entspricht QLocale().name().
Weitere Selektoren werden aus der Umgebungsvariablen „ QT_FILE_SELECTORS “ hinzugefügt, die, sofern gesetzt, eine durch Kommas getrennte Liste von Selektoren enthalten sollte. Beachten Sie, dass diese Variable nur einmal gelesen wird; Selektoren werden möglicherweise nicht aktualisiert, wenn sich die Variable während der Ausführung der Anwendung ändert. Der anfängliche Satz von Selektoren wird nur einmal ausgewertet, und zwar bei der ersten Verwendung.
Sie können zur Erzielung eines benutzerdefinierten Verhaltens auch zusätzliche Selektoren zur Laufzeit hinzufügen. Diese werden bei allen zukünftigen Aufrufen von ` select()` verwendet. Wenn die Liste der zusätzlichen Selektoren geändert wurde, verwenden Aufrufe von ` select()` die neue Liste und können zu anderen Rückgabewerten führen.
Konfliktlösung bei mehreren anwendbaren Selektoren
Wenn mehrere Selektoren auf dieselbe Datei angewendet werden könnten, wird der erste passende Selektor ausgewählt. Die Reihenfolge, in der die Selektoren geprüft werden, ist wie folgt:
- Über ` setExtraSelectors()` festgelegte Selektoren, in der Reihenfolge, in der sie in der Liste stehen
- Selektoren in der Umgebungsvariablen `
QT_FILE_SELECTORS`, von links nach rechts - Lokalisierung
- Plattform
Hier ist ein Beispiel, bei dem mehrere Selektoren gleichzeitig übereinstimmen. Es verwendet Plattform-Selektoren, und zusätzlich wird von der Anwendung basierend auf den Anmeldedaten des Benutzers ein weiterer Selektor namens „admin“ gesetzt. Das Beispiel ist so sortiert, dass die Datei mit der niedrigsten Ü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.pngDa zusätzliche Selektoren vor den Plattform-Selektoren geprüft werden, wird unter Windows die Datei „ +admin/background.png “ ausgewählt, wenn der „admin“-Selektor gesetzt ist, und die Datei „ +windows/background.png “, wenn der „admin“-Selektor nicht gesetzt ist. Unter Linux wird die Datei „ +admin/+linux/background.png “ ausgewählt, wenn „admin“ gesetzt ist, und die Datei „ +linux/background.png “, wenn dies nicht der Fall ist.
Dokumentation der Member-Funktionen
[explicit] QFileSelector::QFileSelector(QObject *parent = nullptr)
Erstellen Sie eine QFileSelector-Instanz. Diese Instanz verfügt über dieselben statischen Auswahlelemente wie andere QFileSelector-Instanzen, jedoch zusätzlich über eigene Auswahlelemente.
Sofern angegeben, verfügt sie über die angegebenen „ QObject “ parent.
[virtual noexcept] QFileSelector::~QFileSelector()
Löscht diese Selektor-Instanz.
QStringList QFileSelector::allSelectors() const
Gibt die vollständige, sortierte Liste der von dieser Instanz verwendeten Selektoren zurück
QStringList QFileSelector::extraSelectors() const
Gibt die Liste der zusätzlichen Selektoren zurück, die dieser Instanz programmgesteuert hinzugefügt wurden.
Siehe auch ` setExtraSelectors()`.
QString QFileSelector::select(const QString &filePath) const
Diese Funktion gibt die ausgewählte Version des Pfads zurück, basierend auf den Bedingungen zur Laufzeit. Sind keine auswählbaren Dateien vorhanden, wird die ursprüngliche Datei „ filePath “ zurückgegeben.
Existiert die Originaldatei nicht, wird die ursprüngliche „ filePath “ zurückgegeben. Das bedeutet, dass Sie über eine Basisdatei als Ausweichmöglichkeit verfügen müssen; es dürfen nicht ausschließlich Dateien in auswählbaren Unterverzeichnissen vorhanden sein.
Informationen zum Auswahlalgorithmus finden Sie in der Klassenübersicht.
QUrl QFileSelector::select(const QUrl &filePath) const
Dies ist eine Komfortversion der Funktion „select“, die auf Objekte vom Typ „ QUrl “ angewendet wird. Wenn das Schema nicht „file“ oder „qrc“ ist, wird sofort „ filePath “ zurückgegeben. Andernfalls wird die Auswahl auf den Pfad von „ filePath “ angewendet und ein „ QUrl “ zurückgegeben, dessen ausgewählter Pfad und andere „ QUrl “-Teile mit denen von „ filePath “ übereinstimmen.
Informationen zum Auswahlalgorithmus finden Sie in der Klassenübersicht.
void QFileSelector::setExtraSelectors(const QStringList &list)
Legt die „ list “ der zusätzlichen Selektoren fest, die dieser Instanz programmgesteuert hinzugefügt wurden.
Diese Selektoren haben Vorrang vor allen automatisch erfassten Selektoren.
Siehe auch ` 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.