Qt アプリケーションでフォントを管理するにQFontDatabase
は、下層のウィンドウ システムで使用可能なフォントに関する情報を提供する を使用できます。このクラスにはいくつかの静的メンバーがあり、特に、アプリケーションにフォントをプログラムで追加することができます。フォントをリソースとして埋め込むこともでき、それらをロードすることもできます。
実際の例を投稿します。「Helvetica Neue」というフォント ファミリをダウンロードし、それをアプリケーションで使用できるようにしたいとします。埋め込みアプローチは次のようになります。
1 - すべての .ttf ファイルをリソースとして追加します。
2 - addApplicationFont()
.ttf ファイルごとに呼び出します。
QFontDatabase fontDB;
fontDB.addApplicationFont(":/fonts/Helvetica Neue/Helvetica Neue CE 35 Thin.ttf");
fontDB.addApplicationFont(":/fonts/Helvetica Neue/Helvetica Neue CE 36 Thin Italic.ttf");
fontDB.addApplicationFont(":/fonts/Helvetica Neue/Helvetica Neue CE 55 Roman.ttf");
fontDB.addApplicationFont(":/fonts/Helvetica Neue/Helvetica Neue CE 56 Italic.ttf");
fontDB.addApplicationFont(":/fonts/Helvetica Neue/Helvetica Neue CE 75 Bold.ttf");
fontDB.addApplicationFont(":/fonts/Helvetica Neue/Helvetica Neue CE 56 Bold Italic.ttf");
3 - 完了です。次のようにして、「Helvetica Neue」フォント ファミリが存在することを確認できます。
for (int i = 0; i < fontDB.families().size(); ++i)
qDebug() << fontDB.families().at(i);
そのため、プログラムでフォント「Helvetica Neue」を設定した場所ならどこでも見つかります。
これは非常に明白ですが、アプリケーションにフォントを 1 つずつロードしたくない場合は、管理が非常に簡単です。たとえば、次の (そして素朴な) コード スニペットは、特定のフォルダー内のすべてのファイルをフォントであるかのように読み込もうとします。
QDir myFontsDirectory("myfonts");
if (!myFontsDirectory.exists())
{
qWarning("Cannot find the directory");
}
else
{
QFileInfoList list = myFontsDirectory.entryInfoList();
for (int i = 0; i < list.size(); ++i)
{
QFileInfo fileInfo = list.at(i);
fontDB.addApplicationFont(fileInfo.filePath());
}
}