QFontDatabase::writingSystems()を使いこなす:Qt GUIプログラマーのためのガイド


QList<QFontDatabase::WritingSystem> QFontDatabase::writingSystems() const;

戻り値

  • QList<QFontDatabase::WritingSystem>: システムで利用可能な書記体系のリスト

詳細説明

  • この関数は、特定の言語や文化圏に適したフォントを選択する際に役立ちます。
  • リストはアルファベット順にソートされます。

QList<QFontDatabase::WritingSystem> writingSystems = QFontDatabase::writingSystems();

for (const QFontDatabase::WritingSystem& writingSystem : writingSystems) {
    qDebug() << writingSystem.id() << ": " << writingSystem.name() << " (" << writingSystem.description() << ")";
}
2: Latin (Latin script)
3: Arabic (Arabic script)
4: Armenian (Armenian script)
5: Bengali (Bengali script)
...
  • Qt GUIでは、QFontDatabase::writingSystemForFont() 関数を使用して、特定のフォントがサポートする書記体系を調べることもできます。
  • QFontDatabase::writingSystems(const QString &family) という派生関数も存在します。これは、特定のフォントファミリがサポートする書記体系のみを返すものです。


#include <QApplication>
#include <QFontDatabase>
#include <QDebug>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // システムにインストールされているすべてのフォントがサポートする書記体系を取得
    QList<QFontDatabase::WritingSystem> writingSystems = QFontDatabase::writingSystems();

    // 各書記体系の情報を表示
    for (const QFontDatabase::WritingSystem& writingSystem : writingSystems) {
        qDebug() << writingSystem.id() << ": " << writingSystem.name() << " (" << writingSystem.description() << ")";
    }

    return 0;
}

このコードの説明

  1. #include <QApplication>#include <QFontDatabase>: Qt GUIとQFontDatabaseクラスをインクルードします。
  2. int main(int argc, char *argv[]): Qtアプリケーションのメイン関数を定義します。
  3. QApplication app(argc, argv);: Qtアプリケーションオブジェクトを作成します。
  4. QList<QFontDatabase::WritingSystem> writingSystems = QFontDatabase::writingSystems();: QFontDatabase::writingSystems() 関数を使用して、システムにインストールされているすべてのフォントがサポートする書記体系を取得します。
  5. for (const QFontDatabase::WritingSystem& writingSystem : writingSystems) { ... }: 各書記体系をループ処理します。
  6. qDebug() << writingSystem.id() << ": " << writingSystem.name() << " (" << writingSystem.description() << ")";: 各書記体系のID、名前、説明をコンソールに出力します。
  7. return 0;: Qtアプリケーションを終了します。
2: Latin (Latin script)
3: Arabic (Arabic script)
4: Armenian (Armenian script)
5: Bengali (Bengali script)
...
  • このコードは、QFontDatabase::writingSystems() 関数の基本的な使用方法を示しています。より複雑な用途については、Qtドキュメントを参照してください。
  • コードを実行する前に、Qt GUIライブラリがインストールされていることを確認してください。
  • このコードは、Qt CreatorなどのIDEを使用してコンパイルして実行することができます。


代替方法

  1. QFont::writingSystems() 関数を使用する:
    • この関数は、特定のフォントがサポートする書記体系のリストを取得します。
    • QFontDatabase::writingSystems() 関数よりも、より具体的な情報を得ることができます。
    • ただし、すべてのフォントについて調べる必要がある場合は、非効率的になる可能性があります。
QFont font("Arial");
QList<QFontDatabase::WritingSystem> writingSystems = font.writingSystems();

for (const QFontDatabase::WritingSystem& writingSystem : writingSystems) {
    qDebug() << writingSystem.id() << ": " << writingSystem.name() << " (" << writingSystem.description() << ")";
}
  1. カスタムロジックを使用する
    • 特定の要件に合致する書記体系のみを抽出する必要がある場合は、カスタムロジックを使用することができます。
    • これは、より複雑で時間のかかる方法ですが、より柔軟性の高いソリューションを提供します。
    • 例えば、特定の地域で使用されている書記体系のみを抽出するロジックを作成することができます。
#include <QLocale>

QList<QFontDatabase::WritingSystem> getWritingSystemsForRegion(const QLocale& locale) {
    QList<QFontDatabase::WritingSystem> writingSystems;

    // 特定の地域で使用されている書記体系を抽出するロジックを実装
    // ...

    return writingSystems;
}

それぞれの方法の利点と欠点

方法利点欠点
QFontDatabase::writingSystems()すべてのフォントを網羅している特定のフォントや地域に焦点を当てることができない
QFont::writingSystems()特定のフォントに関する詳細な情報を得られるすべてのフォントについて調べる必要がある場合は非効率的
カスタムロジック特定の要件に合致する書記体系のみを抽出できるより複雑で時間のかかる

最適な代替方法は、具体的な要件によって異なります。

  • カスタムロジックは、より複雑な要件を満たす場合にのみ使用してください。
  • 特定のフォントや地域に焦点を当てる必要がある場合は、QFont::writingSystems() 関数またはカスタムロジックを使用する方が効率的です。
  • すべてのフォントがサポートする書記体系の包括的なリストが必要な場合は、QFontDatabase::writingSystems() 関数を使用するのが最善です。