QFileSelector Class
QFileSelector は、ファイルバリアントを選択する便利な方法を提供します。詳細...
ヘッダー | #include <QFileSelector> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
継承: | QObject |
パブリック関数
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) |
詳しい説明
QFileSelector は、プラットフォームやデバイスの特性に基づいてファイルのバリアントを選択するための便利な関数です。これにより、デプロイステップで正しいバリアントを決定できない場合などに、すべての異なるバリアントを含む 1 つのコードベースをより簡単に開発およびデプロイできるようになります。
QFileSelector を使う
いつも同じファイルを使うのであれば、QFileSelector を使う必要はありません。
次の使用例を考えてみましょう。異なるロケールで異なる設定ファイルを使いたい場合です。このようにロケール間でコードを選択することができます:
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);
同様に、ターゲット・プラットフォームに応じて異なるデータファイルを選択したい場合、コードは次のようになるでしょう:
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は、このような定型的なコードを書く代わりに便利な機能を提供します。後者の場合、再コンパイルすることなくプラットフォーム固有の設定を使い始めることができます。QFileSelector はまた、プラットフォームとロケールの特定の組み合わせでのみ異なるファイルを選択するなど、便利な方法で複数のセレクタを連結することもできます。たとえば、プラットフォームやロケールに基づいて選択する場合、コードは次のようになります:
QFileSelector selector; QFile defaultsFile(selector.select("data/defaults.conf"));
選択されるファイルは、'+'
とセレクタ名で名付けられたディレクトリに置かれます。上記の例では、以下の場所に配置することで、プラットフォーム設定を選択させることができます:
data/defaults.conf data/+android/defaults.conf data/+ios/+en_GB/defaults.conf
選択されたファイルを見つけるために、QFileSelectorはベースファイルと同じディレクトリを探します。もしアクティブなセレクタを持つ +<selector> という形式のディレクトリがあれば、QFileSelector はベースファイルよりもそのディレクトリにある同じファイル名のファイルを優先します。これらのディレクトリは、例えば、複数のセレクタをチェックするために入れ子にすることができます:
images/background.png images/+android/+en_GB/background.png
これらのファイルが利用可能な場合、androidプラットフォームでは別のファイルを選択することになりますが、ロケールがen_GBの場合のみです。
有効なセレクタが存在しない場合のエラー処理のために、すべてのデプロイメントでセレクタが存在することを期待する場合でも、ベースファイルの場所にデフォルトファイルまたはエラー処理ファイルを持つことを推奨します。
将来のバージョンでは、最適化として、デプロイ時に静的なものとしてマークされ、デプロイ時に移動されるかもしれません。セレクタはパフォーマンス・コストを伴うため、パフォーマンスが重要なコードが含まれる状況では使用を避けることを推奨します。
セレクタの追加
通常使用できるセレクタは次のとおりです。
- android、ios、osx、darwin、mac、macos、linux、qnx、unix、windows。Linuxの場合は、debian、fedora、opensuseなどのディストリビューションの名前も。
- ロケールはQLocale().name()と同じです。
さらなるセレクタは、QT_FILE_SELECTORS
環境変数から追加されます。この環境変数を設定すると、カンマで区切られたセレクタのセットになります。この変数は一度しか読み込まれないことに注意してください。アプリケーションの実行中に変数が変更されても、セレクタは更新されません。セレクタの初期セットは、最初の使用時に一度だけ評価されます。
カスタム動作のために、実行時にセレクタを追加することもできます。これらは、今後select() を呼び出す際に使用されます。追加セレクタのリストが変更された場合、select() への呼び出しでは新しいリストが使用され、異なる結果が返される可能性があります。
複数のセレクタが適用される場合の競合の解決
複数のセレクタが同じファイルに適用される可能性がある場合、最初にマッチしたセレクタが選択されます。セレクタがチェックされる順番は次のとおりです:
- setExtraSelectors() を使って設定されたセレクタ。
- 環境変数
QT_FILE_SELECTORS
のセレクタ、左から右へ - ロケール
- プラットフォーム
複数のセレクタが同時にマッチする例です。プラットフォームセレクタを使用し、さらに "admin "という名前の追加セレクタがユーザー認証情報に基づいてアプリケーションによって設定されます。この例では、すべてのセレクタが存在する場合に、最もマッチングの低いファイルが選択されるようにソートされています:
images/background.png images/+linux/background.png images/+windows/background.png images/+admin/background.png images/+admin/+linux/background.png
余分なセレクタはプラットフォームの前にチェックされるため、Windowsではadminセレクタが設定されると+admin/background.png
、Windowsではadminセレクタが設定されないと+windows/background.png
。Linuxでは、adminが設定されている場合は+admin/+linux/background.png
、設定されていない場合は+linux/background.png
。
メンバー関数ドキュメント
[explicit]
QFileSelector::QFileSelector(QObject *parent = nullptr)
QFileSelector インスタンスを作成します。このインスタンスは、他の QFileSelector インスタンスと同じ静的セレクタを持ちますが、独自の追加セレクタのセットを持ちます。
指定された場合は、指定されたQObject parent を持ちます。
[virtual noexcept]
QFileSelector::~QFileSelector()
このセレクタのインスタンスを破棄する。
QStringList QFileSelector::allSelectors() const
このインスタンスで使用されているセレクタの完全な順序付きリストを返します。
QStringList QFileSelector::extraSelectors() const
このインスタンスにプログラムで追加された追加セレクタのリストを返します。
setExtraSelectors()も参照ください 。
QString QFileSelector::select(const QString &filePath) const
この関数は、実行時の条件に基づいて、選択されたバージョンのパスを返す。選択可能なファイルが存在しない場合は、元のfilePath を返す。
元のファイルが存在しない場合は、元のfilePath を返す。これは、フォールバックするベースファイルが必要であり、選択可能なサブディレクトリにあるファイルだけを持つことはできないことを意味します。
選択アルゴリズムについては、クラスの概要を参照してください。
QUrl QFileSelector::select(const QUrl &filePath) const
これは、QUrl オブジェクトを操作する select の便利バージョンである。スキームがfileでもqrcでもない場合、filePath が直ちに返されます。そうでない場合は、filePath のパスに選択が適用され、選択されたパスと他のQUrl の部分をfilePath と同じにしたQUrl が返されます。
選択アルゴリズムについては、クラスの概要を参照してください。
void QFileSelector::setExtraSelectors(const QStringList &list)
このインスタンスにプログラムで追加された追加セレクタのlist を設定します。
これらのセレクタは、自動的にピックアップされたものよりも優先されます。
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.