QSupportedWritingSystems::setSupported()の詳細解説とその代替方法


QSupportedWritingSystems::setSupported() 関数は、Qt GUIアプリケーションにおいて、特定の文字体系に対するフォントサポートを設定するために使用されます。この関数は、アプリケーションが使用するフォントが特定の文字体系を適切にレンダリングできることを保証するのに役立ちます。

機能

setSupported() 関数は、2つの引数を受け取ります。

  1. writingSystem: サポートする対象となる文字体系を指定します。これは、QFontDatabase::WritingSystem 列挙型の値で表されます。
  2. support: 文字体系のサポート状態を指定します。true の場合、サポートされます。false の場合、サポートされません。
// ラテン文字体系をサポートする
QSupportedWritingSystems writingSystems;
writingSystems.setSupported(QFontDatabase::Latin, true);

// ギリシャ文字体系をサポートしない
writingSystems.setSupported(QFontDatabase::Greek, false);
  • Qt GUI 6.0 以降では、QSupportedWritingSystems クラスは非推奨となっています。代わりに、QFontDatabase::WritingSystems クラスを使用することを推奨します。
  • QSupportedWritingSystems を使用すると、フォントデータベースの負荷を軽減できます。
  • 個々のフォントオブジェクトに対してフォントサポートを設定することもできます。
  • QSupportedWritingSystems オブジェクトは、アプリケーション全体でフォントサポートを設定するために使用できます。
  • 上記の説明は、Qt GUI 6.x を対象としています。古いバージョンの Qt では、機能や API が異なる場合があります。


#include <QApplication>
#include <QSupportedWritingSystems>

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

  // ラテン文字体系をサポートする
  QSupportedWritingSystems writingSystems;
  writingSystems.setSupported(QFontDatabase::Latin, true);

  // ギリシャ文字体系をサポートしない
  writingSystems.setSupported(QFontDatabase::Greek, false);

  // ここでアプリケーションのコードを実行
  // ...

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

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

  // QFontDatabase::WritingSystems オブジェクトを作成
  QFontDatabase::WritingSystems writingSystems;

  // ラテン文字体系をサポートする
  writingSystems.setSupported(QFontDatabase::Latin, true);

  // ギリシャ文字体系をサポートしない
  writingSystems.setSupported(QFontDatabase::Greek, false);

  // フォントデータベースにサポート済み文字体系を設定
  QFontDatabase::instance().setSupportedWritingSystems(writingSystems);

  // ここでアプリケーションのコードを実行
  // ...

  return app.exec();
}
  • これらの例は、Qt GUI 6.x を対象としています。古いバージョンの Qt では、機能や API が異なる場合があります。


  • パフォーマンス: フォントデータベースの負荷を軽減するために設計されていますが、多くの文字体系をサポートする必要がある場合は、パフォーマンスが低下する可能性があります。
  • 複雑性: アプリケーション全体でフォントサポートを設定するには、QSupportedWritingSystems オブジェクトを作成し、個々の文字体系に対して setSupported() メソッドを呼び出す必要があります。
  • 非推奨: Qt GUI 6.0 以降では非推奨となっており、将来的に削除される可能性があります。

これらの欠点を克服するために、QSupportedWritingSystems::setSupported() の代替方法がいくつかあります。

QFontDatabase::WritingSystems を使用する

QFontDatabase::WritingSystems クラスは、Qt GUI 6.0 で導入された新しい機能です。このクラスを使用すると、フォントデータベースにサポート済み文字体系を設定できます。これは、QSupportedWritingSystems オブジェクトよりもシンプルでパフォーマンス効率の高い方法です。

QFontDatabase::WritingSystems writingSystems;
writingSystems.setSupported(QFontDatabase::Latin, true);
writingSystems.setSupported(QFontDatabase::Greek, false);

QFontDatabase::instance().setSupportedWritingSystems(writingSystems);

個々のフォントオブジェクトに対してフォントサポートを設定する

個々のフォントオブジェクトに対してフォントサポートを設定することもできます。これは、特定のフォントのみで特定の文字体系を使用する必要がある場合に役立ちます。

QFont font("Arial");
font.setSupportedWritingSystems(QSet<QFontDatabase::WritingSystem>() << QFontDatabase::Latin);

QFont::resolve() 関数を使用する

QFont::resolve() 関数は、フォントが特定の文字をレンダリングできるかどうかを確認するために使用できます。この関数は、フォントサポートを設定するよりも柔軟性の高い方法です。

QFont font("Arial");

if (font.resolve("Γεια σου")) {
  // フォントはギリシャ文字をレンダリングできる
} else {
  // フォントはギリシャ文字をレンダリングできない
}

カスタムフォントローダーを実装する

カスタムフォントローダーを実装することで、フォントサポートを完全に制御できます。これは、高度なアプリケーション開発が必要な場合にのみ推奨されます。

QSupportedWritingSystems::setSupported() 関数の代替方法はいくつかあり、それぞれ長所と短所があります。アプリケーションの要件に応じて最適な方法を選択することが重要です。