我有一个QtQuick / QML 5.6项目,我需要加载45个.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 }
如果我为每个系列中的一种字体添加一个单个字体加载器,那么它适用于该字体的所有重量变化
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 }
我对此感到惊讶。尽管从未在任何 EncodeSans-Thin.ttf
中提及过这些文件,但它确实似乎使用EncodeSans-Bold.ttf
表示较轻的权重而FontLoader
表示粗体重。
编辑:上面的代码不起作用。由于单独的错误,我现在知道Font.Thin
从未工作(显示常规权重),并且文本渲染器可能会模拟粗体。
我应该在项目中添加45 FontLoader
,每个TTF一个吗?或者有没有办法让所有的TTF加载而不需要FontLoader
?
答案 0 :(得分:1)
Repeater {
id: repeater
property var fontList: [] // e.g. Qt.resolvedUrl("qrc:///fonts/EncodeSans-Regular.ttf"), or load a list from resource/config files
model: ListModel {
id: listModel
}
FontLoader {
source: model.source
}
Component.onCompleted: {
for (var i = 0; i < fontList.length; i++) {
listModel.append({ source: fontList[i] })
}
}
}
编辑:给定字符串和URL列表,您可以使用转发器加载许多字体。 Component.onCompleted:脚本读取URLS列表以从中加载字体,并将所有这些字体添加到列表中。由于转发器模型是ListModel,因此转发器在添加到ListModel时将创建新项目。这种方式也可以重新定位转发器,但这里不再使用。 注意:此代码段中未提供加载URL列表。