首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt QFont Kerning -不影响/Kerning字体

Qt QFont Kerning -不影响/Kerning字体
EN

Stack Overflow用户
提问于 2016-09-02 18:45:00
回答 1查看 1.1K关注 0票数 2

问题:如我的QFont中显示的那样,对字体的角化没有影响。

  • 在Qt中,默认情况下,kerning应用于QFont
  • 尝试QFont.setKerning(True)失败
  • QFont.setKerning(False)也不影响字体显示。
  • 字体为OpenType (.otf),QFont.kerning()返回True
  • 在其他应用程序(例如,Microsoft )中使用此字体是成功的
  • 其他QFont方法(如QFont.setLetterSpacing )在此字体上工作成功
  • 字体是空闲的,文件名是Idler-Inner.otf

显然没有其他人有这个问题。在这个话题上找不到任何东西。

更新

这似乎与字体类型有关。我可以kern ttf字体,也不能在Qt中的其他otf字体。虽然otf>ttf转换是一些字体的解决方案,但对于我这样的其他字体,它似乎破坏了字体。

令人惊讶的是,Qt不支持主要字体类型的内核化。否则,我能想到的唯一解决方案就是破解字体(将字体转换为ttx,并以一种不反对ttf的方式手动转换到ttf)。

字体的工作量太大,至少对于开发人员来说是这样。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-11 23:56:48

查看qfontengine.cpp中的源代码,我发现了一个函数loadKerningPairs。这包含行。

代码语言:javascript
复制
QByteArray tab = getSfntTable(MAKE_TAG('k', 'e', 'r', 'n'));

它似乎从字体的主表列表中加载了一个旧样式的TTF内核表。

此kerning表包含一对字符及其关联的调整值。它被存储在QFont中,在绘图时,简单的查找将检索这些值。

然而,在现代OpenType字体( TrueType或Type-1风味)中,kern子表可能不存在,因为OpenType功能GPOS功能要强大得多。这个表的二进制格式也要复杂得多;例如,我们可以为左、右或两个字符定义字符类,而不是单个字符。这一点,以及其他OpenType特性,似乎还没有在QFont中实现(然而,每11-2016年9月-2016年)。

GPOS不仅定义了kerning,而且还定义了许多其他功能,例如大写、上标和下标定位的自定义跟踪,以及字符上或字符下面重音的自动放置,对于所有这些功能,您可以为不同的脚本类型甚至不同的语言指定不同的值。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39298916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档