QML:如何检索默认字体对象?

时间:2016-04-19 08:35:49

标签: c++ qt qml

我有一个QML Item,其中包含一些Text字段,它们应该具有相同的字体。为此,我引入了myFont类型的新属性font。初始化此属性我使用Qt.font函数创建一个字体对象。但我必须指定至少一个属性(familypointSize)。

我的问题是:如何检索myFont属性的默认字体? 如果我只创建一个Text{}项,它已经附加了默认字体,我如何获得myFont属性的相同字体? (同时我使用隐藏的Text字段并为其font属性创建别名,但我想要一个更好的解决方案。)

Item {
 property font myFont: Qt.font({pointSize: 10})
 Text {
  id: header
  font: myFont
  text: "My Header"
 }
 Text {
  id: subject
  font: myFont
  text: "My Subject"
 }
 Text {
  id: message
  font: myFont
  text: "Some meassage!"
 }
}

3 个答案:

答案 0 :(得分:4)

我认为解决此问题的正确方法是使用您需要使用的字体创建自己的对象类型。

在以下示例中,新对象为 [1] 2.625 2.875 2.875 3.125 1.000 1.375 3.125 1.625 3.875 3.375 2.500 4.000 3.250 [14] 3.125 4.375 3.500 3.250 3.875 2.750 3.625 3.000 2.875 2.875 4.250 2.500 3.375 [27] 3.250 2.750 2.625 2.875 3.625 1.375 3.500 3.500 1.875 3.125 2.625 3.375 2.000 [40] 2.375 2.625 2.250 2.875 2.000 3.250 3.125 4.000 2.125 3.125 3.875 2.875 1.750 [53] 2.125 2.250 2.250 3.250 3.250 2.125 2.125 3.500 2.750 1.875 4.000 3.125 2.500 [66] 2.875 1.875 2.625 2.125 3.375 2.875 1.500 2.375 2.125 3.875 。我不知道你的整个代码,但我想你在你的问题中找到了代表你的MyText.qml

<强> MyText.qml

ListView

<强> main.qml

import QtQuick 2.0

Text {
    font: Qt.font({pointSize: 10})
}

答案 1 :(得分:4)

现在,我已经深入研究了Qt源代码。 事实证明,Qt使用已注册的私有TextSingleton(Qt 5.6)定义为:

pragma Singleton
import QtQuick 2.2
Text {
}

初始化各种qml控件的font属性:

font: TextSingleton.font

进一步深入研究C ++代码表明,对于Text项,font属性是默认初始化QFont,它提供从{{1}检索的QFont对象}}

答案 2 :(得分:0)

正如我提到的 here,FontMetrics 是一种可行的方法,因为它是可配置的并且不使用 Qt.font()。您可以在父项或 SIngleton 类型中声明它,并且可以将属性绑定到它。

这里有一个例子

Item {
id: root

FontMetrics {
    id: fontMetrics
    font.family: "Arial"
    font.pixelSize: 24
}

property alias font: fontMetrics.font

Text { font: root.font }
Text { font: root.font }
}