如何加载同一系列的多种字体

Posted

技术标签:

【中文标题】如何加载同一系列的多种字体【英文标题】:How to load multiple font of same familiy 【发布时间】:2020-11-10 17:36:20 【问题描述】:

我正在使用 Qt 框架编写应用程序。在显示中,我必须显示多个信息,但使用同一家族的不同类型的字体,蒙特塞拉特。

到目前为止,我为加载字体所做的是:

int ultralightid = QFontDatabase::addApplicationFont(":/Montserrat_UltraLight.tff");
QString UltraFont= QFontDatabase::applicationFontFamilies(ultralightid ).at(0);
QFont font1(UltraFont,QFont::Normal);
font1.setPixelSize(50);

int lightid = QFontDatabase::addApplicationFont(":/Montserrat_Light.tff");
QString LightFont= QFontDatabase::applicationFontFamilies(lightid).at(0);
QFont font2(LightFont,QFont::Normal);
font2.setPixelSize(150);


label1->setFont(font1);
label2->setFont(font2);

label1->setText("bla bla");
label2->setText("bla bla");

字体大小正确,但字体本身不正确。根据我所注意到的(尝试使用 Hairline_Montserrat、Light_Montserrat、UltraLight_Montserrat),就好像字体具有某种优先级。如果我全部声明,所有字体都是 Light 字体,如果我评论该字体类型,所有字体都是 Hairline 字体,否则(最后优先级)标签使用超轻字体。

我尝试添加其他字体类型(来自其他系列),在这种情况下,我的代码可以正常工作。

如果我使用

 qDebug()<<QFontDatabase::applicationFontFamilies(ultralightid);
 qDebug()<<QFontDatabase::applicationFontFamilies(lightid);

他们都打印了家庭“Montserrat”。 我在 CMAKE 中使用了 qrc 文件和 AUTORCC 标志(使用 qmake 应该类似)并且所有文件都正确上传。

您知道是否有其他方法可以添加同系列的字体?还是我做错了什么?

这里是字体:

https://www.onlinewebfonts.com/download/9d31c906a6cc6064bbe7d33d51058317光 https://it.allfont.net/download/montserrat-light/超轻

【问题讨论】:

【参考方案1】:

这是一个老问题,但当我尝试在 Qt 中加载正常、粗体、... 字体系列的版本时,我只是在努力解决完全相同的问题。

我通过简单地给每个 ttf 文件一个不同的姓氏来解决了这个问题(尽管以一种有点 hacky 的方式)。我用Typograf,只需打开字体,右键打开属性,然后点击重命名。可能还有许多其他工具也可以做到这一点。

【讨论】:

【参考方案2】:

您不需要单独管理一个家族的字体文件。

我建议这个解决方案:

    创建一个包含同一家族的所有 ttf 的文件夹。

    通过id = QFontDatabase.addApplicationFont(path)从文件夹中加载所有文件

    通过QFontDatabase.applicationFontFamilies(id)从这些文件中收集所有字体系列

    检查是否只加载了一个所需的系列,并且系列名称与请求的系列名称完全相同,或警告用户这些错误。

    创建字体对象font = QFont(family)

    例如,font.setItalic(True)。如果加载的是斜体版本的family,则使用它,否则将由QT从Regular创建。

【讨论】:

这个解决方案适用于当前版本的 Qt,但不幸的是似乎不适用于 Kubuntu 20.04 附带的 Qt 版本。

以上是关于如何加载同一系列的多种字体的主要内容,如果未能解决你的问题,请参考以下文章

如何标准化不同字体系列的字体大小

更改 iFrame 的字体大小和字体系列

C#/VB.NET 在Excel单元格中应用多种字体格式

如何确定 CRichEditCtrl 中的文本选择是不是具有多种字体大小?

如何在C#中更改richtextbox中多种大小的字体?

如何使用 iText 获取使用多种字体呈现的 pdf