如何在我的应用程序中嵌入自定义字体

How to embed a custom font in my application

我想在我的应用程序中添加自定义字体,并且我已经添加到我的资源文件中。

我的代码如下:

int id = QFontDatabase::addApplicationFont(":/fonts/ae_AlMateen.ttf");
QMessageBox::information(this,"Message",QString::number(id));

还有.qrc文件的内容。

<RCC>
    <qresource prefix="/fonts">
        <file alias="ae_AlMateen">ae_AlMateen.ttf</file>
    </qresource>
</RCC>

但问题是 addApplicationFont 总是 returns -1

请注意, 当将 :/fonts/ae_AlMateen.ttf 更改为直接路径 ex:C://ae_AlMateen.ttf 时,它工作正常。

我希望字体文件与我的应用程序可执行文件集成,以使应用程序不需要附加字体文件。

如果您也在使用 qml,您可以在 qml 文件中加载字体 in this way。我推荐。

如果您还想从 cpp 文件加载字体,请阅读 this article,它可能对您有所帮助。

编辑: 以下代码可以在 OSX10.10 上的 Qt5.4.1 上运行。 (字体内嵌在可执行文件中)

int id = QFontDatabase::addApplicationFont(":/fonts/fontawesome-webfont.ttf");
QMessageBox::information(NULL,"Message",QString::number(id));  // this shows id is 0.

QFont font;
font.setFamily("FontAwesome");
font.setPointSize(30);
ui->commandLinkButton->setFont(font);
ui->commandLinkButton->setText("\uf021"); // this shows the Refresh icon.

编辑2: 我用 Qt5.4.1(msvc2013 64bit) 在 Win7 上做了另一个测试。字体嵌入在 exe 文件中。一切正常。

啊...现在,在您添加 .qrc 后,我明白了。易于解释:

<file alias="ae_AlMateen">ae_AlMateen.ttf</file>

您在 .qrc 文件中添加了别名。如果您删除 alias="ae_AlMateen" 它将像我们所有人预期的那样工作...扩展名为 .ttf。