我想缩放这样的字体大小Label:
Label {
font.size: font.size*0.8
}
当然,这会创建一个绑定循环。有没有办法在不创建隐藏Label元素的情况下做到这一点?
Label {
id: hiddenLabel
}
Label {
font.size: hiddenLabel.font.size*0.8
}
缩放整个标签并不是最优的,因为文本质量下降:
Label {
scale: 0.8
}
问候,
我想缩放这样的字体大小Label:
Label {
font.size: font.size*0.8
}
当然,这会创建一个绑定循环。有没有办法在不创建隐藏Label元素的情况下做到这一点?
Label {
id: hiddenLabel
}
Label {
font.size: hiddenLabel.font.size*0.8
}
缩放整个标签并不是最优的,因为文本质量下降:
Label {
scale: 0.8
}
问候,
除了已经提到的其他选项外,还有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 风格的主题代码。
您可以通过将字体大小设置为Component.onCompleted
Label {
text: 'Þetta reddast'
Component.onCompleted: font.pixelSize *= 0.8
}
这具有文本布局两次的负面影响:一次用于较大尺寸,然后再次用于较小尺寸。
我会按照这里的建议在 a中适当地定义一组fonts具有正确尺寸的集合。在那里,您可以使用应用程序的默认字体度量来初始计算相对大小,因此您以后不必费心。style.qml singleton
FontMetrics {
id: fontMetrics
}
Label {
font.size: fontMetrics.font.size * 0.8
}
我建议在 中定义一个全局属性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 }
}