QML:如何检索默认字体对象
QML: How to retrieve a default font object?
我有一个QML Item
,其中有一些Text
字段,它们应该都有相同的字体。为了实现这一点,我引入了font
型的新性质myFont
。要初始化这个属性,我使用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!"
}
}
现在,我已经深入研究了Qt源代码。事实证明,Qt使用了一个注册的私有TextSingleton,它被定义为(Qt 5.6):
pragma Singleton
import QtQuick 2.2
Text {
}
初始化各种qml控件的字体属性:
font: TextSingleton.font
进一步挖掘C++代码可以发现,对于Text
项,font
属性是默认初始化的QFont
,它给出了从QGuiApplication::font()
检索到的QFont
对象。
我认为解决这个问题的正确方法是使用需要使用的字体创建自己的对象类型。
在下面的示例中,新对象将是MyText.qml
。我不知道你的全部代码,但我想你在问题中发布的代表有一个ListView
。
MyText.qml
import QtQuick 2.0
Text {
font: Qt.font({pointSize: 10})
}
main.qml
import QtQuick 2.5
import QtQuick.Window 2.2
Window {
visible: true
ListModel {
id: myModel
ListElement {
header: "header xxx"
subject: "subject xxx"
message: "message xxx"
}
ListElement {
header: "header yyy"
subject: "subject yyy"
message: "message yyy"
}
ListElement {
header: "header zzz"
subject: "subject zzz"
message: "message zzz"
}
}
ListView {
anchors.fill: parent
model: myModel
delegate: Item {
width: 300; height: 80
Column {
MyText {
id: myheader
text: header + " - family: " + font.family + " size: " + font.pointSize
}
MyText {
id: mysubject
text: subject + " - family: " + font.family + " size: " + font.pointSize
}
MyText {
id: mymessage
text: message + " - family: " + font.family + " size: " + font.pointSize
}
}
}
}
}
正如我在这里提到的,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 }
}
您可以使用Qt.application.font
访问QML中的默认字体。
您可以使用在C++中获取并设置此字体
QFont font = QApplication::font();
font.setPointSize(12); //make various other changes or get a completely new QFont
QApplication::setFont(font);
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 如何使用默认参数等选择模板专业化
- 具有默认模板参数的多态类的模板推导失败
- 在C++中测量postscript字体宽度
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 初始化具有非默认构造函数的std::数组项的更好方法
- 何时提供默认参数作为模板参数
- 是默认情况下分配给char数组常量的值
- 具有默认值的引用获取函数
- 具有默认模板类型的默认构造函数的类型推导
- 如何在Directwrite中获得给定字体的可用OpenType功能
- 当给定默认值时,为什么此模板参数推导失败
- ExtTextOut 文本的持续闪烁,在一段时间后,文本将恢复为默认字体
- 如何在 DirectWrite 中使用默认 UI 字体绘制文本
- Qt4/PyQt4-无法设置QTextDocument的默认字体
- QML:如何检索默认字体对象
- Win32:设置富编辑的默认字体和文本颜色
- QAxObject Excel工作表--为整个Excel工作表设置默认字体
- Qt 5- QTextEdit恢复默认字体