问题:如我的QFont中显示的那样,对字体的角化没有影响。
QFont。QFont.setKerning(True)失败QFont.setKerning(False)也不影响字体显示。.otf),QFont.kerning()返回TrueQFont方法(如QFont.setLetterSpacing )在此字体上工作成功Idler-Inner.otf显然没有其他人有这个问题。在这个话题上找不到任何东西。
更新
这似乎与字体类型有关。我可以kern ttf字体,也不能在Qt中的其他otf字体。虽然otf>ttf转换是一些字体的解决方案,但对于我这样的其他字体,它似乎破坏了字体。
令人惊讶的是,Qt不支持主要字体类型的内核化。否则,我能想到的唯一解决方案就是破解字体(将字体转换为ttx,并以一种不反对ttf的方式手动转换到ttf)。
字体的工作量太大,至少对于开发人员来说是这样。
发布于 2016-09-11 23:56:48
查看qfontengine.cpp中的源代码,我发现了一个函数loadKerningPairs。这包含行。
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,而且还定义了许多其他功能,例如大写、上标和下标定位的自定义跟踪,以及字符上或字符下面重音的自动放置,对于所有这些功能,您可以为不同的脚本类型甚至不同的语言指定不同的值。
https://stackoverflow.com/questions/39298916
复制相似问题