2017-04-06 37 views
0

缩放字体大小欲缩放Label这样的字体大小:Qt的设为Qml快速控制2:无结合环

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

当然这创造了一个结合环。有没有办法做到这一点,而不创建一个隐藏的Label元素?

Label { 
    id: hiddenLabel 
} 

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

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

Label { 
    scale: 0.8 
} 

问候,

回答

6

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

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

此只读属性包含由QGuiApplication::font()返回的默认应用程序字体。

commit message for the change提到被认为在当时的其他选项:

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

如果你真的需要立足于你正在使用的特定控制的字体大小,只保证的方法是创建一个“空” /“默认构造的”对照实例:

Button { 
    id: dummyButton 
} 

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

这是因为每种样式对于不同类型的控件都有不同的字体大小。例如,请参阅Material style's theme code

1

你可能会在Component.onCompleted

使用赋值,而不是绑定的,通过设置字体大小
Label { 
    text: 'Þetta reddast' 
    Component.onCompleted: font.pixelSize *= 0.8 
} 

这有负面影响临文本放置两次:一次是较大的尺寸,然后是较小的尺寸。

我会在style.qml singleton中合适地定义一组fonts作为proposed here。在那里你可以使用应用程序的默认字体指标来初始化计算相对大小,所以你不必在后面打扰。

0
FontMetrics { 
    id: fontMetrics 
} 

Label { 
    font.size: fontMetrics.font.size * 0.8 
} 
+1

嗨,在'Controls'的背景下,这不会给你可靠的结果,例如,你可能使用'ApplicationWindow'作为根对象并在那里设置一个字体大小。这将被传播到'Label'但不包括非控制的FontMetrics。因此,'Label'和'FontMetrics'的默认字体大小不一定相同 - 因此它的第0.8个因子都不是。请参阅[** here **](https://doc.qt.io/qt-5/qml-qtquick-controls2-control.html#font-prop) – derM

+0

@derM如果它不绑定到根元素。有没有可以做到这一点的非根元素?关于'FontMetrics':我喜欢定义一切(甚至非文本内容)相对于它。 – Velkan

+0

您可以使用附件['ApplicationWindow'](https://doc.qt.io/qt-5/qml-qtquick-controls2-applicationwindow.html#window-attached-prop)属性获取案例中的字体@derM引用,然后在'fontMetrics'上设置。例如:'font:ApplicationWindow.window.font'虽然不同的控件有不同的默认尺寸,所以这只适用于某些控件:http://code.qt.io/cgit/qt/qtquickcontrols2.git/tree/src/imports /controls/material/qquickmaterialtheme.cpp#n67 – Mitch