c++ - 如何加载同一家族的多种字体

标签 c++ qt c++11 fonts

我正在使用 Qt 框架编写应用程序。在显示中,我必须显示多个信息,但使用的是同一个系列的不同类型的字体,Montserrat。
到目前为止,我为加载字体所做的工作是:

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/超轻
  • 最佳答案

    这是一个老问题,但在尝试加载 Qt 中字体系列的普通、粗体……版本时,我只是在为完全相同的问题苦苦挣扎。
    我通过简单地给每个 ttf 文件一个不同的姓氏解决了这个问题(虽然以一种有点hacky的方式)。我用过 Typograf ,只需打开字体,右键单击打开属性,然后单击重命名。可能还有许多其他工具可以做到这一点。

    关于c++ - 如何加载同一家族的多种字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63012818/

    相关文章:

    c++ - 渲染一个透明的 QLabel

    c++ - QGLBuffer 和 VBO

    c++ - 如何在C++ 11中使用boost::optional进行重写?

    c++ - 使用不相关的指针移动 shared_ptr

    c++ - 是否可以在Windows 8环境下运行在Visual Studio 2005上编译的VC++、Win32应用程序?

    c++ - 如何使用 Visual C++ 2008 创建 native 应用程序?

    c++ - cython cmake 模块运行时错误

    c++ - 调整QListView的高度以适应内容

    在运行时选择模板参数的 C++ 函数

    c++ - 当 QDialogs show() 时保持 QMainWindow 最小化