对于我们的应用程序,我们使用的是Avenir字体.
我们有两个版本:
avenir_light.ttf - 字体的简易版本.
avenir_black.ttf - 字体的粗体版本.
我的系统(Mac OS X中)并没有安装这些字体,因为我想我的dev的机器有一个客户端机器类似的条件.
两种字体都在我们的应用程序资源中 我们通过以下方式加载它们
// 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上安装时字体的外观: