【发布时间】:2016-09-25 00:34:27
【问题描述】:
我有一个 QtQuick/QML 5.6 项目,我需要加载 45 个 .ttf 文件,这些文件代表不同(相关)字体系列的重量变化。
例如,这里是字体文件的一个子集(两个系列的三个权重):
- EncodeSans-Thin.ttf
- EncodeSans-Regular.ttf
- EncodeSans-Bold.ttf
- EncodeSansNarrow-Thin.ttf
- EncodeSansNarrow-Regular.ttf
- EncodeSansNarrow-Bold.ttf
我已将所有 45 个 .ttf 文件添加到我的项目中的 .qrc,但是当我尝试使用字体系列时,它不起作用:
Text { text:"So Thin"; font.family:"Encode Sans"; font.weight:Font.Thin }
Text { text:"Fatty"; font.family:"Encode Sans"; font.weight:Font.Bold }
如果我为每个系列中的一种字体添加一个 single 字体加载器,那么它适用于该字体的所有重量变化
FontLoader { source:"qrc:/fonts/EncodeSans-Regular.ttf" }
FontLoader { source:"qrc:/fonts/EncodeSansNarrow-Regular.ttf" }
Text { text:"So Thin"; font.family:"Encode Sans"; font.weight:Font.Thin }
Text { text:"Fatty"; font.family:"Encode Sans"; font.weight:Font.Bold }
我对此感到惊讶。尽管在任何FontLoader 中从未提及这些文件,但它肯定似乎使用EncodeSans-Thin.ttf 来表示细重,EncodeSans-Bold.ttf 表示粗体。
编辑:上面的代码不起作用。由于一个单独的错误,我现在知道Font.Thin 从未工作过(显示的是常规重量),并且文本渲染器可能正在模拟粗体。
我是否应该在我的项目中添加 45 个FontLoader,每个 TTF 一个?或者有没有办法让所有的TTF都被加载而不需要FontLoader?
【问题讨论】:
-
还是只用 C++ 做?
QDirIterator it(":/fonts/*.ttf"); while (it.hasNext()) QFontDatabase::addApplicationFont(it.next()); -
@peppe 感谢您的代码,这可能会有所帮助。不过,我更愿意坚持使用纯 QML。
-
正如您在我对其他 qml 字体相关问题的回答中看到的那样,我会说上述建议是一种可行的方法,所以不幸的是,在大多数情况下纯 QML 字体支持是无法解决的痛苦......
-
@Phrogz:我现在也是这样,你用 QML 解决了吗?
-
@Phataas 我只是在我的项目中添加了 45 个
FontLoader实例,每个 TTF 一个。