QFontDatabase::writingSystems() 関数を使って Qt GUI アプリケーションで利用可能なすべての書記体系を取得する

2024-04-02

Qt GUI の QFontDatabase::writingSystems() 関数について

関数の使い方

QFontDatabase::writingSystems() 関数は、以下の2つの方法で使用できます。

  1. 引数なしで呼び出す

この場合、関数は WritingSystem 型の要素のリストを返します。WritingSystem 型は、以下の書記体系を表す列挙型です。

  • Latin:ラテン文字
  • Greek:ギリシャ文字
  • Cyrillic:キリル文字
  • Armenian:アルメニア文字
  • Hebrew:ヘブライ文字
  • Arabic:アラビア文字
  • Syriac:シリア文字
  • Thaana:ターナ文字
  • Devanagari:デーヴァナーガリー文字
  • Bengali:ベンガル文字
  • Gurmukhi:グルムキー文字
  • Gujarati:グジャラート文字
  • Oriya:オリヤー文字
  • Tamil:タミル文字
  • Telugu:テルグ文字
  • Kannada:カンナダ文字
  • Malayalam:マラヤーラム文字
  • Sinhala:シンハラ文字
  • Thai:タイ文字
  • Lao:ラオ文字
  • Tibetan:チベット文字
  • Mongolian:モンゴル文字
  • Georgian:グルジア文字
  • Hangul:ハングル文字
  • Japanese:日本語
  • Korean:韓国語
  • Vietnamese:ベトナム語
  • Symbol:記号
  1. WritingSystem 型の引数を渡す

この場合、関数は、渡された書記体系に対応するフォントファミリーのリストを返します。

以下のコードは、QFontDatabase::writingSystems() 関数の使い方を示しています。

// すべての書記体系のリストを取得
QList<QFontDatabase::WritingSystem> writingSystems = QFontDatabase::writingSystems();

// 日本語に対応するフォントファミリーのリストを取得
QList<QString> japaneseFontFamilies = QFontDatabase::writingSystems(QFontDatabase::Japanese);

// リストの内容を出力
for (const QFontDatabase::WritingSystem &writingSystem : writingSystems) {
  qDebug() << writingSystem;
}

for (const QString &fontFamily : japaneseFontFamilies) {
  qDebug() << fontFamily;
}


Qt GUI の QFontDatabase::writingSystems() 関数を使ったサンプルコード

サンプルコード 1:すべての書記体系のリストを取得する

#include <QtWidgets>

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

  // すべての書記体系のリストを取得
  QList<QFontDatabase::WritingSystem> writingSystems = QFontDatabase::writingSystems();

  // リストの内容を出力
  for (const QFontDatabase::WritingSystem &writingSystem : writingSystems) {
    qDebug() << writingSystem;
  }

  return 0;
}

このコードは、以下の出力を生成します。

Latin
Greek
Cyrillic
Armenian
Hebrew
Arabic
Syriac
Thaana
Devanagari
Bengali
Gurmukhi
Gujarati
Oriya
Tamil
Telugu
Kannada
Malayalam
Sinhala
Thai
Lao
Tibetan
Mongolian
Georgian
Hangul
Japanese
Korean
Vietnamese
Symbol

サンプルコード 2:日本語に対応するフォントファミリーのリストを取得する

#include <QtWidgets>

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

  // 日本語に対応するフォントファミリーのリストを取得
  QList<QString> japaneseFontFamilies = QFontDatabase::writingSystems(QFontDatabase::Japanese);

  // リストの内容を出力
  for (const QString &fontFamily : japaneseFontFamilies) {
    qDebug() << fontFamily;
  }

  return 0;
}

このコードは、以下の出力を生成します。

MS UI Gothic
MS PGothic
ヒラギノ明朝
ヒラギノ角ゴシック
游ゴシック
游明朝
メイリオ
Yu Gothic
Yu Mincho

サンプルコード 3:特定の書記体系に対応したフォントを選択する

#include <QtWidgets>

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

  // QComboBoxを作成
  QComboBox comboBox;

  // すべての書記体系のリストを取得
  QList<QFontDatabase::WritingSystem> writingSystems = QFontDatabase::writingSystems();

  // リストの内容をComboBoxに追加
  for (const QFontDatabase::WritingSystem &writingSystem : writingSystems) {
    comboBox.addItem(QFontDatabase::writingSystemDisplayName(writingSystem));
  }

  // ComboBoxの現在のインデックスに基づいてフォントを選択
  QFont font = QFontDatabase::font(writingSystems.at(comboBox.currentIndex()));

  // フォントをラベルに設定
  QLabel label("Hello, world!");
  label.setFont(font);

  // ウィジェットを表示
  QWidget window;
  window.setCentralWidget(&label);
  window.show();

  return app.exec();
}

このコードは、以下のウィジェットを表示します。

Screenshot of the widget created by sample code 3: [無効な URL を削除しました]

このウィジェットには、ComboBox とラベルが表示されています。

  • ComboBox には、すべての書記体系の名前が表示されます。
  • ラベルには、「Hello, world!」という文字列が表示されます。
  • ComboBox の現在のインデックスに基づいて、ラベルに表示されるフォントが選択されます。

これらのサンプルコードは、Qt GUI アプリケーションで QFontDatabase::writingSystems() 関数を使用する方法を示すための出発点として使用できます。



Qt GUI で特定の言語や地域に対応したフォントを選択するその他の方法

QFont::family() と QFont::setStyle() を使用する

QFont::family() 関数は、フォントファミリーの名前を取得するために使用できます。QFont::setStyle() 関数は、フォントスタイルを設定するために使用できます。

以下のコードは、日本語に対応したフォントを選択する方法を示しています。

QFont font;
font.setFamily("MS UI Gothic");
font.setStyle(QFont::StyleNormal);

// フォントをラベルに設定
QLabel label("こんにちは、世界!");
label.setFont(font);

QLocale::system() を使用する

QLocale::system() 関数は、現在のシステムロケールを取得するために使用できます。システムロケールには、言語や地域に関する情報が含まれています。

以下のコードは、システムロケールに基づいてフォントを選択する方法を示しています。

QLocale locale = QLocale::system();

// システムロケールに対応したフォントを取得
QFont font = locale.font();

// フォントをラベルに設定
QLabel label("Hello, world!");
label.setFont(font);

QTranslator を使用する

QTranslator クラスは、アプリケーションのテキストを翻訳するために使用できます。

以下のコードは、QTranslator を使用して日本語に対応したフォントを選択する方法を示しています。

QTranslator translator;
translator.load("ja");

// アプリケーションに翻訳を適用
QApplication::installTranslator(&translator);

// 日本語に対応したフォントを選択
QFont font = QFont("MS UI Gothic");

// フォントをラベルに設定
QLabel label("こんにちは、世界!");
label.setFont(font);

これらの方法は、それぞれ異なる利点と欠点があります。QFontDatabase::writingSystems() 関数は、すべての書記体系のリストを取得できるという利点がありますが、特定の言語や地域に対応したフォントを選択するには、さらに処理が必要になる場合があります。QFont::family()QFont::setStyle() を使用すると、特定のフォントファミリーを直接選択できますが、すべての言語や地域に対応したフォントが利用できるとは限りません。QLocale::system() を使用すると、システムロケールに基づいてフォントを自動的に選択できますが、すべてのシステムロケールがフォント情報を提供しているわけではありません。QTranslator を使用すると、アプリケーションのテキストを翻訳し、同時にフォントを選択できますが、翻訳ファイルの作成と管理が必要になります。

どの方法を使用するかは、アプリケーションの要件によって異なります。




QRadialGradient::setCenterRadius() 関数の詳細解説

概要クラス: QRadialGradient関数: setCenterRadius()役割: 放射状グラデーションの中心点からの半径を設定引数:戻り値: なし詳細解説QRadialGradientは、中心点から放射状に広がるグラデーションを生成するクラスです。setCenterRadius()関数は、このグラデーションの中心点からの半径を設定します。半径の値は、グラデーションの拡散範囲に影響を与えます。



QTextCharFormat::setFontItalic() 関数を使う

この解説では、以下の内容について説明します:QTextCharFormat::setFontItalic() の概要関数の使用方法コード例関連する関数概要QTextCharFormat::setFontItalic() は、QTextCharFormat クラスのメンバー関数です。QTextCharFormat クラスは、テキストの書式設定情報を格納するために使用されます。setFontItalic() 関数は、この情報に斜体の設定を追加します。


QPlatformSurfaceEvent::QPlatformSurfaceEvent() 関数を使ったサンプルコード

QPlatformSurfaceEvent::QPlatformSurfaceEvent() コンストラクタには、以下の引数があります。surfaceEventType: イベントタイプを表す QPlatformSurfaceEvent::SurfaceEventType 型の値。


2次元ベクトルの距離計算:QVector2D::distanceToSquared()とlengthSquared()

QVector2D::lengthSquared() は、以下の様な場面で役立ちます。2つのベクトルの距離を計算するベクトルの長さを比較するベクトルの単位ベクトルを取得する円や球などの形状とベクトルの交差判定を行うQVector2D には、lengthSquared() の他に length() という関数も存在します。length() はベクトルの長さを返しますが、lengthSquared() はベクトルの長さの平方を返します。


Qt GUI アプリ開発における QTextBlock クラスの役割と機能

QTextBlock の主な役割:テキストブロック(段落)の構造と内容を表すテキストレイアウトの生成と管理書式設定情報の取得と設定ユーザーデータの保存と取得QTextBlock の主要な機能:テキストへのアクセス: text():ブロック内のテキストを取得 length():ブロック内の文字数 lineCount():ブロック内の行数 iterator begin(), end(): ブロック内のテキストフラグメントを反復処理



【保存版】Qt GUI プログラミング:QFileSystemModel::remove() 関数を使いこなす

QFileSystemModel::remove() 関数は、ファイルシステムモデルからモデルアイテムインデックスを削除し、対応するファイルをファイルシステムから削除するために使用されます。削除が成功した場合、true を返します。アイテムを削除できない場合は、false を返します。


QGraphicsItem::setTransform()、QGraphicsItem::scale()、QGraphicsItem::setScale():それぞれの違いと使い分け

デフォルトでは、原点はアイテムの左上隅になります。しかし、originプロパティを使用することで、原点を任意の座標に変更することができます。原点を変更することで、以下のようなメリットがあります。アイテムを特定の点を中心にスケーリングすることができます。


QPlainTextEdit::paste()メソッドの代替方法

QPlainTextEdit::paste()メソッドは、Qt Widgetsライブラリで提供されるQPlainTextEditウィジェットにテキストを貼り付けるためのメソッドです。このメソッドは、クリップボードに保存されているテキストをウィジェット内の指定された位置に挿入します。


多様なニーズに対応する言語モデル

概要QIconEngine::write() 関数は、QIconEngine オブジェクトの内部データ構造をシリアル化し、指定された QDataStream オブジェクトに書き込みます。この関数は、アイコンデータをファイルに保存したり、ネットワーク経由で送信したりするために使用されます。


Qt WidgetsにおけるQGraphicsScene::drawForeground()の応用例

QGraphicsScene::drawForeground()は、Qt Widgetsフレームワークにおける重要な関数の一つです。これは、グラフィックスシーンの前面に描画を行うための仮想関数であり、さまざまな用途に使用することができます。