我想像这样缩放Label
的字体大小:
Label {
font.size: font.size*0.8
}
当然这会创建一个绑定循环。有没有办法在不创建隐藏的Label
元素的情况下执行此操作?
Label {
id: hiddenLabel
}
Label {
font.size: hiddenLabel.font.size*0.8
}
缩放整个标签并不是最佳选择,因为文本质量下降了:
Label {
scale: 0.8
}
此致
答案 0 :(得分:7)
除了已经提到的其他选项之外,还有Qt.application.font
:
Label {
font.pixelSize: Qt.application.font.pixelSize * 0.8
}
此只读属性包含
QGuiApplication::font()
返回的默认应用程序字体。
commit message for the change提及当时考虑的其他选项:
- "
<h3>Large text</h3>
&#34; - 在文本下面增加了额外的空间,因为它是一个HTML元素,所以如果你想要一个像样的布局,那就没有用了。- 对像素大小进行硬编码。与Qt :: AA_EnableHighDpiScaling结合使用时工作正常,只要您猜测正确的尺寸 适用于您定位的每个设备/显示器。不行 没有设置Qt :: AA_EnableHighDpiScaling。
- 使用FontMetrics / TextMetrics。工作正常,但有点冗长。
- 使用空文本元素。创建一个不必要的项目。已被FontMetrics / TextMetrics取代。
- defaultPixelSize / implicitPixelSize和defaultPointSize / implicitPointSize。已经有字体相关了 字体分组属性之外的属性,所以这不可能 不合适,但API已经非常大了。
如果您确实需要将字体大小基于您正在使用的特定控件,唯一可靠的方法是创建一个&#34;空&#34; /&#34;默认构造&#34 ;该控件的实例:
Button {
id: dummyButton
}
Button {
font.pixelSize: dummyButton.font.pixelSize * 0.8
}
这是因为每种样式对于不同类型的控件具有不同的字体大小。例如,请参阅Material style's theme code。
答案 1 :(得分:1)
您可以通过在Component.onCompleted
Label {
text: 'Þetta reddast'
Component.onCompleted: font.pixelSize *= 0.8
}
这会产生负面影响,即文本布局两次:一次是较大尺寸,另一次是较小尺寸。
我可以在fonts
中定义一组style.qml singleton
ExpenseDTO expenseDTO = new ExpenseDTO();
作为proposed here。在那里,您可以使用应用程序默认字体指标初始计算相对大小,因此您不必再费心。
答案 2 :(得分:0)
FontMetrics {
id: fontMetrics
}
Label {
font.size: fontMetrics.font.size * 0.8
}
答案 3 :(得分: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 }
}