C++ QML:如何检索默认字体对象?
我有一个QMLC++ QML:如何检索默认字体对象?,c++,qt,qml,C++,Qt,Qml,我有一个QML项目,其中包含一些文本字段,这些字段应该具有相同的字体。为此,我引入了一个新属性myFont,类型为font。初始化此属性我使用Qt.font函数创建字体对象。但我必须至少指定一个属性(要么族要么点大小) 我现在的问题是:如何检索myFont属性的默认字体? 如果我只创建一个Text{}项,它已经附加了默认字体,那么如何为myFont属性获得相同的字体?(同时,我使用了一个隐藏的文本字段,并为它的字体属性创建了一个别名,但我想要一个更好的解决方案) 我认为解决这个问题的正确方法是使
项目
,其中包含一些文本
字段,这些字段应该具有相同的字体。为此,我引入了一个新属性myFont
,类型为font
。初始化此属性我使用Qt.font
函数创建字体对象。但我必须至少指定一个属性(要么族
要么点大小
)
我现在的问题是:如何检索myFont
属性的默认字体?
如果我只创建一个Text{}
项,它已经附加了默认字体,那么如何为myFont
属性获得相同的字体?(同时,我使用了一个隐藏的文本
字段,并为它的字体
属性创建了一个别名,但我想要一个更好的解决方案)
我认为解决这个问题的正确方法是使用需要使用的字体创建自己的对象类型 在下面的示例中,新对象将是
MyText.qml
。我不知道你的全部代码,但我想你有一个列表视图
,上面有你在问题中发布的代表
MyText.qml
import QtQuick 2.0
Text {
font: Qt.font({pointSize: 10})
}
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
}
}
}
}
}
main.qml
import QtQuick 2.0
Text {
font: Qt.font({pointSize: 10})
}
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
}
}
}
}
}
现在,我已经深入研究了Qt源代码。 事实证明,Qt使用了一个注册的私有TextSingleton,它被定义为(Qt 5.6): 各种qml控件的字体属性已初始化:
font: TextSingleton.font
深入挖掘C++代码,发现对于
中删除默认的标题
绑定?实际上,文本字段位于ListView委托中,因此这是我第一次尝试,但没有成功(或者我不知道怎么做)。您应该使用需要使用的字体创建自己的对象类型(即声明字体
)。然后使用文本
而不是MyText
。这有助于将常用字体从外部设置为listview代理吗?请参阅我的答案。这可以工作,但不可配置,这是我喜欢声明字体属性的主要原因。我的ListView位于一个可放置在表单上的separte组件中,在那里我喜欢将字体设置为所有ListView项Text
@jonjonas68请根据您的要求更新您的问题。可能,您需要的是绑定或一些信号/插槽,以便在必要时更新字体。 main表单{MyComponentWithAListView{font:Qt.font({family:Arial,pointSize:12}}}}