为了在 Qt 应用程序中管理字体,您可以使用QFontDatabase
提供有关底层窗口系统中可用字体的信息的 a。该类有几个静态成员,除其他外,它们允许您以编程方式将字体添加到您的应用程序。您甚至可以将字体作为资源嵌入,并且仍然可以加载它们。
我将发布一个真实世界的示例。假设您下载了一个名为“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”的何处,都会找到它。
这很明显,但是如果您不想将字体一个一个地加载到您的应用程序中,那么管理起来很容易。例如,以下(和幼稚的)代码片段将尝试加载特定文件夹中的所有文件,就好像它们是字体一样。
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());
}
}