QFileSelector Class
QFileSelector は、ファイルバリアントを選択する便利な方法を提供します。詳細...
Header: | #include <QFileSelector> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Inherits: | 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()も参照してください 。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。