我有一个QML Item
,其中包含一些Text
字段,它们应该具有相同的字体。为此,我引入了myFont
类型的新属性font
。初始化此属性我使用Qt.font
函数创建一个字体对象。但我必须指定至少一个属性(family
或pointSize
)。
我的问题是:如何检索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!"
}
}
答案 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 }
}