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:
- Selektoren, die über setExtraSelectors() gesetzt wurden, in der Reihenfolge, in der sie in der Liste stehen
- Selektoren in der Umgebungsvariablen
QT_FILE_SELECTORS
, von links nach rechts - Gebietsschema
- 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.