QFontComboBoxのwritingSystemプロパティ: 詳細解説とサンプルコード


QFontComboBox::writingSystem プロパティは、QFontComboBox ウィジェットに表示されるフォントを、特定の文字体系に基づいてフィルタリングするために使用されます。これは、ユーザーが使用する言語やスクリプトに適したフォントを簡単に選択できるようにするために役立ちます。

プロパティ値

QFontComboBox::writingSystem プロパティには、以下のいずれかの値を設定できます。

  • QFontDatabase::Any: デフォルト値。すべてのフォントが表示されます。
QFontComboBox comboBox;
comboBox.setWritingSystem(QFontDatabase::Japanese);
  • QFontComboBox::currentFontChanged 信号は、writingSystem プロパティの値が変更されたときに発生します。
  • QFontComboBox::writingSystem プロパティは、QFontComboBox::fontFilters プロパティと組み合わせて使用できます。
  • Qt Widgets に関する詳細については、Qt ドキュメントを参照してください。
  • 上記以外にも、QFontComboBox ウィジェットをカスタマイズするための様々なプロパティとメソッドが用意されています。


例 1: 特定の文字体系に対応するフォントのみを表示

#include <QApplication>
#include <QFontComboBox>

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

  QFontComboBox comboBox;
  comboBox.setWritingSystem(QFontDatabase::Japanese);

  comboBox.show();

  return app.exec();
}
#include <QApplication>
#include <QFontComboBox>

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

  QFontComboBox comboBox;
  comboBox.setWritingSystem(QFontDatabase::Japanese | QFontDatabase::Latin);
  comboBox.setFontFilters(QFontComboBox::ScalableFont);

  comboBox.show();

  return app.exec();
}

説明

  • また、setFontFilters メソッドを使用して、スケーラブルなフォントのみを表示するようにフィルタリングしています。

これらの例は、QFontComboBox::writingSystem プロパティと QFontComboBox::fontFilters プロパティを組み合わせて、様々な条件に一致するフォントを簡単に表示する方法を示しています。

  • 他の Qt バージョンを使用している場合は、API リファレンスを参照して、対応するプロパティとメソッドを確認する必要があります。
  • 上記のコードは Qt 6 でコンパイルして実行することを想定しています。


カスタムフォントフィルターを使用する

bool isScalableAndJapaneseOrLatin(const QFont &font) {
  return font.scalable() &&
         (font.writingSystem() == QFontDatabase::Japanese ||
          font.writingSystem() == QFontDatabase::Latin);
}

このフィルターを QFontComboBox ウィジェットに設定するには、以下のコードを使用します。

QFontComboBox comboBox;
comboBox.setFontFilters(QFontComboBox::CustomFontFilter, isScalableAndJapaneseOrLatin);

QFontDatabase::families` メソッドを使用する

QFontComboBox comboBox;

const QFontDatabase::WritingSystem writingSystems[] = {
  QFontDatabase::Japanese
};

for (const QFontDatabase::WritingSystem &writingSystem : writingSystems) {
  const QStringList families = QFontDatabase::families(writingSystem);
  for (const QString &family : families) {
    comboBox.addItem(family);
  }
}

手動でフォントを追加する

QFontComboBox comboBox;

comboBox.addItem("Meiryo");
comboBox.addItem("YuGothic");

どの方法を選択するべきか

どの方法を選択するかは、状況によって異なります。

  • 手動でフォントを追加する方法は、最も単純ですが、必要なフォントの数が多くなった場合は煩雑になります。
  • QFontDatabase::families メソッドを使用する方法は、比較的簡単ですが、すべてのフォントファミリーがリストされているとは限りません。
  • カスタムフォントフィルターを使用する方法は、柔軟性が高いですが、コード量が多くなります。
  • ユーザーがフォントをプレビューできるように、QFontComboBox ウィジェットに QFontPreview ウィジェットを組み込むこともできます。
  • どの方法を選択する場合も、ユーザーがフォントを簡単に選択できるように、QFontComboBox ウィジェットに適切なラベルとツールチップを設定する必要があります。