0

我想缩放这样的字体大小Label

Label {
    font.size: font.size*0.8
}

当然,这会创建一个绑定循环。有没有办法在不创建隐藏Label元素的情况下做到这一点?

Label {
    id: hiddenLabel
}

Label {
    font.size: hiddenLabel.font.size*0.8
}

缩放整个标签并不是最优的,因为文本质量下降:

Label {
    scale: 0.8
}

问候,

4

4 回答 4

9

除了已经提到的其他选项外,还有Qt.application.font

Label {
    font.pixelSize: Qt.application.font.pixelSize * 0.8
}

此只读属性保存由 . 返回的默认应用程序字体QGuiApplication::font()

更改的提交消息提到了当时考虑的其他选项:

  • " <h3>Large text</h3>" - 在文本下方添加额外的空间,因为它是一个 HTML 元素,所以如果你想要一个体面的布局,它并不是很有用。
  • 硬编码像素大小。与 Qt::AA_EnableHighDpiScaling 结合使用时可以正常工作,只要您猜测适用于您所定位的每个设备/显示器的正确尺寸。不设置 Qt::AA_EnableHighDpiScaling 将无法工作。
  • 使用 FontMetrics/TextMetrics。工作正常,但有点冗长。
  • 使用一个空的 Text 元素。创建一个不必要的项目。被 FontMetrics/TextMetrics 取代。
  • defaultPixelSize/implicitPixelSize 和 defaultPointSize/implicitPointSize。在字体分组属性之外已经有与字体相关的属性,所以这不会不合适,但 API 已经相当大了。

如果您确实需要基于您正在使用的特定控件的字体大小,唯一有保证的方法是创建该控件的“空”/“默认构造”实例:

Button {
    id: dummyButton
}

Button {
    font.pixelSize: dummyButton.font.pixelSize * 0.8
}

这是因为每种样式对于不同类型的控件都有不同的字体大小。例如,参见Material 风格的主题代码

于 2017-04-06T07:28:32.590 回答
1

您可以通过将字体大小设置为Component.onCompleted

Label {
    text: 'Þetta reddast'
    Component.onCompleted: font.pixelSize *= 0.8
}

这具有文本布局两次的负面影响:一次用于较大尺寸,然后再次用于较小尺寸。

我会按照这里的建议在 a中适当地定义一组fonts具有正确尺寸的集合。在那里,您可以使用应用程序的默认字体度量来初始计算相对大小,因此您以后不必费心。style.qml singleton

于 2017-04-06T06:19:12.817 回答
0
FontMetrics {
    id: fontMetrics
}

Label {
    font.size: fontMetrics.font.size * 0.8
}
于 2017-04-06T06:43:42.660 回答
0

我建议在 中定义一个全局属性main.qml,而不是分别在每个元素中定义文本大小。
为此,main.qml像这样定义一个属性:

readonly property Item fontCenter: Item {
    property real heading1PointSize: 21
    property real heading2PointSize: 18
    property real bodyPointSize: 12
}

并在任何地方使用它:

Text {
    text: "sample body text"
    font { pointSize: fontCenter.bodyPointSize }
}

同样,如果您有问题,您可以根据另一个设置属性值:

readonly property Item fontCenter: Item {
    property real bodyPointSize: 12
    property real heading1PointSize: bodyPointSize * 2.0
    property real heading2PointSize: bodyPointSize * 1.8
}

或用于特殊情况,如下所示:

Button {
    text: "Special Offer!"
    font { pointSize: fontCenter.bodyPointSize * 1.3 }
}
于 2018-08-15T06:31:44.910 回答