gpt4 book ai didi

Qt:字体资源适用于正常粗细,粗体失败

转载 作者:行者123 更新时间:2023-12-03 10:11:43 25 4
gpt4 key购买 nike

对于我们的应用程序,我们使用 Avenir 字体。

我们有两个版本:

  • avenir_light.ttf - 字体的精简版。
  • avenir_black.ttf - 一个 粗体 字体的版本。

  • 我的系统 (Mac OS X) 做 不是 安装这些字体,因为我希望我的开发机器与客户端机器具有类似的条件。

    这两种字体都在我们的应用程序资源中。我们通过以下方式加载它们:
    // returns 0
    int id = this->fontDatabase.addApplicationFont(":/fonts/avenir_light.ttf");

    // returns 1
    int id_b = this->fontDatabase.addApplicationFont(":/fonts/avenir_black.ttf");

    // returns "Avenir LT Com"
    QString family = QFontDatabase::applicationFontFamilies(id).at(0);

    // returns "Avenir Lt Com" -- same as other font)
    QString family1 = QFontDatabase::applicationFontFamilies(id_b).at(0);

    // This will contain two strings:
    // "35 Light"
    // "95 Black"
    QStringList sl = this->fontDatabase.styles(family);

    // this returns TRUE
    bool isThereBold = this->fontDatabase.bold(family, "95 Black");

    两种字体都成功加载(至少,两者都获得了良好的 ID,分别为 0 和 1,而不是 -1)。当我查询他们的姓氏时,两种字体都返回“Avenir LT Com”,我想知道这是否是一个问题,因为 运行时只有浅色字体可用。 -- 即使我指定了粗体、黑色和任何高数字的权重。

    字体不一样。黑色确实是“大胆”。将它们安装到我的 Mac 中会在字体书“Avenir LT Com”中显示一个“系列”,有两种变体:普通和黑色。所以我知道即使它们是两个不同的 TTF 文件,姓氏也是相同的。

    相同代码的唯一方法是这样简单:
    QFont font("Avenir LT Com");
    font.setPixelSize(22);
    font.setWeight(QFont::Light); // tried QFont::Black too...
    font.setStyleStrategy(QFont::PreferAntialias);
    ui->MyLabel->setFont(font);

    ...使用两种版本的字体是 如果我在系统 (OS X ) 上安装这两种字体,那么神奇的是,浅色和粗体版本都开始工作。当然,这对我不起作用,因为我需要从我的应用程序资源中正确运行这些字体——我不能让用户为我的应用程序安装字体......

    我在这里做错了吗? Qt 失败是因为我加载了两种具有相同“系列”名称的字体吗?有没有办法我仍然可以从资源加载这些字体并成功使用它们而无需在目标机器上安装它们?

    这是安装在我的 Mac 上时字体的外观:
    enter image description here

    最佳答案

    我让它工作。

    我发现我认为是 Qt 4.8.5 错误,适用于 OS X。我不确定这是否是由于我使用的 OS X 10.9 - 尚未在 10.8 或 10.7 上进行测试。

    我加载字体就像我之前指出的那样。不同之处应该是在 OS X 下的用法。虽然这两种字体的家族是相同的(“Avenir LT Com”),但它们需要以不同的方式处理,以便使粗体字体起作用。

    所以,这失败了:

    QFont font("Avenir LT Com");
    font.setPixelSize(22);
    font.setWeight(QFont::Bold); // tried QFont::Black too...
    font.setStyleStrategy(QFont::PreferAntialias);
    ui->MyLabel->setFont(font);

    但是这个 成功:
    QFont font("Avenir LT Com 95 Black");  // I have to put the family name + style together!
    font.setPixelSize(22);
    font.setWeight(QFont::Bold); // ...And still set the weight!
    font.setStyleStrategy(QFont::PreferAntialias);
    ui->MyLabel->setFont(font);

    无需其他更改。

    关于Qt:字体资源适用于正常粗细,粗体失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20335240/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com