QFontDatabase::removeApplicationFont() 関数の詳細解説


QFontDatabase::removeApplicationFont() 関数は、アプリケーションによって追加されたフォントをアンロードします。この関数は、Qt GUI モジュールの QFontDatabase クラス内にあり、フォント管理に関する機能を提供します。

構文

bool QFontDatabase::removeApplicationFont(int id);

パラメータ

  • id: アンロードするフォントを識別する ID 番号。これは、QFontDatabase::addApplicationFont() 関数によって返される値です。

戻り値

  • 失敗した場合: false
  • 成功した場合: true

詳細

QFontDatabase::removeApplicationFont() 関数は、アプリケーションによって追加されたフォントのみをアンロードします。システムフォントや他のアプリケーションによって追加されたフォントは影響を受けません。

この関数は、フォントが使用されていない場合のみ成功します。フォントが使用されている場合は、アンロードが失敗し、false が返されます。

フォントをアンロードすると、そのフォントファミリに属するすべてのフォントスタイルとサイズもアンロードされます。

int fontId = QFontDatabase::addApplicationFont("myfont.ttf");
if (fontId != -1) {
  // フォントが正常に追加された
  // ...

  // フォントを使用しなくなった
  QFontDatabase::removeApplicationFont(fontId);
}
  • Qt 5.14 以降では、QFontDatabase::removeAllApplicationFonts() 関数を使用して、アプリケーションによって追加されたすべてのフォントを一度にアンロードすることもできます。
  • この関数は、GUI スレッド以外から呼び出すことはできません。
  • QFontDatabase::removeApplicationFont() 関数は、フォントが使用されていない場合のみ呼び出すようにしてください。


例 1: 特定のフォント ID を使用してフォントをアンロードする

int fontId = QFontDatabase::addApplicationFont("myfont.ttf");
if (fontId != -1) {
  // フォントが正常に追加された
  // ...

  // フォントを使用しなくなった
  QFontDatabase::removeApplicationFont(fontId);
}

例 2: フォントファミリ名を使用してフォントをアンロードする

QString fontFamily = "MyFont";
int fontId = QFontDatabase::applicationFontId(fontFamily);
if (fontId != -1) {
  // フォントが正常に追加された
  // ...

  // フォントを使用しなくなった
  QFontDatabase::removeApplicationFont(fontId);
}

例 3: アプリケーションによって追加されたすべてのフォントをアンロードする

QFontDatabase::removeAllApplicationFonts();
  • 例 3
    この例では、QFontDatabase::removeAllApplicationFonts() 関数を使用して、アプリケーションによって追加されたすべてのフォントをアンロードします。
  • 例 2
    この例では、QFontDatabase::applicationFontId() 関数を使用して、フォントファミリ名からフォント ID を取得します。次に、QFontDatabase::removeApplicationFont() 関数を使用して、そのフォント ID を使ってフォントをアンロードします。
  • 例 1
    この例では、QFontDatabase::addApplicationFont() 関数を使用してフォントを追加し、そのフォント ID を取得します。次に、QFontDatabase::removeApplicationFont() 関数を使用して、そのフォント ID を使ってフォントをアンロードします。


  • Qt 5.14 以前では、個々のフォントしかアンロードできない
  • GUI スレッド以外から呼び出せない
  • フォントが使用されていない場合のみアンロードできる

これらの制限を回避するために、以下の代替方法を検討することができます。

QFont オブジェクトを削除する

QFont オブジェクトを削除すると、そのフォントがアンロードされます。ただし、この方法は、そのフォントファミリに属する他のフォントスタイルやサイズにも影響を与える可能性があります。

QFont font("MyFont");
// ...

delete font;

QFontManager クラスを使用する

QFontManager クラスは、フォント管理に関するより高度な機能を提供します。removeFont() 関数は、フォントファミリ名を使用してフォントをアンロードすることができます。

QFontManager fontManager;
fontManager.removeFont("MyFont");

プラットフォーム固有の API を使用する

Windows や macOS などのプラットフォームでは、フォントをアンロードするためのプラットフォーム固有の API が提供されている場合があります。これらの API は、Qt の API よりも低レベルですが、より多くの制御を提供することができます。

フォントファイルを削除する

最終手段として、フォントファイルを削除することができます。ただし、この方法は、システム全体に影響を与える可能性があるため、注意して使用する必要があります。

最適な代替方法の選択

最適な代替方法は、状況によって異なります。以下の点を考慮して選択してください。

  • 必要な制御レベル
    基本的なアンロード機能のみ、またはより高度な機能
  • フォントの使用状況
    フォントが使用されているかどうか
  • アンロードするフォントの範囲
    個々のフォント、フォントファミリ、またはすべてのアプリケーションフォント