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

C++ QML:如何检索默认字体对象?,c++,qt,qml,C++,Qt,Qml,我有一个QML项目,其中包含一些文本字段,这些字段应该具有相同的字体。为此,我引入了一个新属性myFont,类型为font。初始化此属性我使用Qt.font函数创建字体对象。但我必须至少指定一个属性(要么族要么点大小) 我现在的问题是:如何检索myFont属性的默认字体? 如果我只创建一个Text{}项,它已经附加了默认字体,那么如何为myFont属性获得相同的字体?(同时,我使用了一个隐藏的文本字段,并为它的字体属性创建了一个别名,但我想要一个更好的解决方案) 我认为解决这个问题的正确方法是使

我有一个QML
项目
,其中包含一些
文本
字段,这些字段应该具有相同的字体。为此,我引入了一个新属性
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++代码,发现对于>文本< /C>项目,字体>代码>属性是默认初始化<代码> QFooe<代码>,它给出了<代码> qFooG/<代码>对象,从<代码> QGueAp:: Fund()/<代码> .< /P>为什么不使用<代码>属性字体MyFoo:Head?字体<代码>?并从

标题
中删除默认的
字体
绑定?实际上,文本字段位于ListView委托中,因此这是我第一次尝试,但没有成功(或者我不知道怎么做)。您应该使用需要使用的字体创建自己的对象类型(即声明
文本
)。然后使用
MyText
而不是
Text
。这有助于将常用字体从外部设置为listview代理吗?请参阅我的答案。这可以工作,但不可配置,这是我喜欢声明字体属性的主要原因。我的ListView位于一个可放置在表单上的separte组件中,在那里我喜欢将字体设置为所有ListView项
main表单{MyComponentWithAListView{font:Qt.font({family:Arial,pointSize:12}}}}
@jonjonas68请根据您的要求更新您的问题。可能,您需要的是绑定或一些信号/插槽,以便在必要时更新字体。