【问题标题】:How do I get two FontLoaders in QML to work?如何让 QML 中的两个 FontLoader 工作?
【发布时间】:2019-08-27 17:23:49
【问题描述】:

使用 QML,我在一个 pragma Singleton 文件中定义了两个 FontLoader。当我在 QML 场景中运行我的程序时,我只能显示其中一种字体。如何获得我定义的两种字体来渲染?谢谢!

// Defining two fonts inside Fonts.qml:

pragma Singleton
import QtQuick 2.4

QtObject {

    readonly property var primaryFont: FontLoader {
        source: "../assets/fonts/CircularStd-Book.ttf"
    }

    readonly property var boldFont: FontLoader {
        source: "../assets/fonts/CircularStd-Bold.otf"
    }

}

// Calling both fonts in separate QML file:

import QtQuick 2.4
import "../../../imports/Fonts.qml"

Text {
    id: welcomeMessage
    text: "Good Morning"
    font.family: Fonts.primaryFont.name
}

Text {
    id: driverName
    text: "Joe"
    font.family: Fonts.boldFont.name
}

我希望welcomeMessage 文本以正常字体粗细显示,而driverName 文本以粗体粗细显示。但是,两种字体都以正常的字体粗细显示。

如果我在我的 pragma Singleton 中注释掉 primaryFont,那么 driverName 会以粗体显示。为什么我无法加载这两种字体?

【问题讨论】:

  • "name"的两个值是什么?由于两者似乎来自相同的基本字体,它们可能具有相同的名称并被合并,那么我认为您将不得不使用粗体:true 或 weight 属性。
  • 你应该设置 driverName font.bold: true 让它工作。
  • @FrankOsterfeld 你是对的!我在 font.family 名称上运行了一个 console.log,粗体和主要字体都收到了“Circular Std”的值。我试图在我的 FontLoader 中使用自定义名称手动覆盖它,但是字体根本没有加载。我假设字体名称来自其元数据或其他什么?
  • 我们还得出结论,name 属性在这里是不可预测的:stackoverflow.com/questions/45242560/…

标签: qt fonts qml


【解决方案1】:
Text {
    id: driverName
    text: "Joe"
    font.family: Fonts.boldFont.name
    font.bold: true
}

添加它以使其工作: font.bold: 真

【讨论】:

  • 这绝对有效,谢谢您的建议!但是,对于我的项目来说,重要的是我能够实际加载多种字体。正如@FrankOsterfeld 指出的那样,QML 似乎认为粗体和正常粗细字体系列是相同的——即,当我运行 console.log 时,它们显示的值为“Circular Std”。
  • @JoelMertz 没有其他方法可以做到这一点。如果不设置此属性,您将永远不会使字体变粗。您确实加载了多种字体。
  • 好的,有趣!我期待粗体字体加载并显示为粗体。当我尝试在同一个字体系列中显示半粗体、浅色和其他独特的、自定义设计的字体粗细时,我也遇到了这个问题。现在,我将加载粗体字体并告诉它是粗体!谢谢。
  • @JoelMertz 有用于更具体设置的 font.weight 属性。 doc.qt.io/qt-5/qml-font.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
相关资源
最近更新 更多