【问题标题】:Matching a font style exactly with QML与 QML 完全匹配字体样式
【发布时间】:2017-12-27 19:04:24
【问题描述】:

我有一个 QML 应用程序使用的字体系列有 5 种粗细(Light/Regular/Medium/Bold/Black)和 3 种样式:Normal、Italic 和 Condensed。

当我加载相同重量的“普通”和“精简”样式时,它们共享相同的姓氏;先加载哪个样式就使用哪个样式:

FontLoader { source:"qrc:/fonts/DINPro-CondRegular.otf"; id:cond }
FontLoader { source:"qrc:/fonts/DINPro-Regular.otf";     id:norm }
Timer { running:true; onTriggered:console.log(id:norm.name==cond.name) } // outputs `true`

// This ends up using the condensed flavor
Text { text:'hi mom'; font { family:'DINPro' } }

有没有办法告诉Text 对象使用特定的字体文件或FontLoader 实例?斜体样式有 italic property,但没有“浓缩”风格的属性。

如何在同一个文档中同时使用字体的普通样式和精简样式,并为不同的Text指定使用哪种字体?

【问题讨论】:

    标签: qt fonts qml qtquick2


    【解决方案1】:

    我发现对于这种特殊字体,我可以使用styleName property 来控制各种风格。我一直在尝试各种样式字符串,直到找到可行的字符串。

    FontLoader { source:"qrc:/fonts/DINPro-Regular.otf"     }
    FontLoader { source:"qrc:/fonts/DINPro-CondRegular.otf" }
    FontLoader { source:"qrc:/fonts/DINPro-CondMedium.otf"  }
    
    Text { text:'norm'; font { family:'DINPro';                    styleName:'Regular' } }
    Text { text:'bold'; font { family:'DINPro'; weight:Font.Bold;  styleName:'Regular' } }
    Text { text:'blak'; font { family:'DINPro'; weight:Font.Black; styleName:'Regular' } }
    Text { text:'cond norm'; font { family:'DINPro'; styleName:'CondRegular' } }    
    Text { text:'cond bold'; font { family:'DINPro'; styleName:'CondBold'    } }    
    Text { text:'cond blak'; font { family:'DINPro'; styleName:'CondBlack'   } }
    

    感觉就像是用胶带和绳子固定在一起的,但它确实有效。如果有人有更强大的方法来处理这个问题——尤其是确切地知道哪些字符串适用于styleName——我会很乐意接受这个答案而不是这个答案。

    【讨论】:

    • 我得出了类似的结论。原来所有FontLoader 组件的name 属性都是相同的。因此,您需要通过weightstyleName 等属性指定样式,正如您所说,这似乎远非精确。这对我来说也是一个反复试验的过程。真的很惊讶这没有更清楚地记录。 QML 和 CSS 似乎都采用了“建议而不是命令”的编程方法。
    猜你喜欢
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 2013-02-09
    • 1970-01-01
    相关资源
    最近更新 更多