找回密码
 立即注册
收起左侧

如何在qml中,设置一种全局字体,让所有控件都用这个字体

7
回复
17095
查看
[复制链接]

尚未签到

来源: 2019-11-1 14:01:17 显示全部楼层 |阅读模式
1Qter豆

最佳答案

查看完整内容

这里分享一下另外一种 Qt 官方推荐的解决方案: 1、mian 函数中设置全局样式 2、创建一个名为 qtquickcontrols2.conf 的配置文件,将配置文件加入到 qrc 资源文件的根目录 / 下。内容如下: 通过以上配置文件设置默认字体和默认字体样式。更多资料请参考 Qt 官方文档:doc.qt.io/qt-5/qtquickcontrols2-configuration.html ...
回复

使用道具 举报

尚未签到

2019-11-1 14:01:18 显示全部楼层
这里分享一下另外一种 Qt 官方推荐的解决方案:
1、mian 函数中设置全局样式
  1. QQuickStyle::setStyle("Material");
复制代码

2、创建一个名为 qtquickcontrols2.conf 的配置文件,将配置文件加入到 qrc 资源文件的根目录 / 下。内容如下:
  1. [Material]
  2. Primary=#337EFF
  3. Accent=#337EFF
  4. Theme=System
  5. Background=#FFFFFF
  6. Font\Family=Microsoft YaHei UI
  7. Font\PixelSize=14
复制代码

通过以上配置文件设置默认字体和默认字体样式。更多资料请参考 Qt 官方文档:doc.qt.io/qt-5/qtquickcontrols2-configuration.html
回复

使用道具 举报

尚未签到

2019-11-1 16:11:01 显示全部楼层
实现一个自定义的 Text 组件,里面把默认格式都设置好,要用到的位置使用自己的自定义组件就可以了。比如名为 StyledText.qml 的文件,里面内容:

  1. import QtQuick 2.0

  2. Text {
  3.     color: "#333333"
  4.     font.family: "Microsoft YaHei Light"
  5.     font.pixelSize: 14
  6.     textFormat: Text.PlainText
  7. }
复制代码


要用到时

  1. StyledText {
  2.     text: qsTr("Styled text")
  3.     font.pixelSize: 14
  4.     color: "#FFFFFF"
  5. }
复制代码
回复

使用道具 举报

尚未签到

2019-11-2 09:26:13 显示全部楼层
jiajia_deng 发表于 2019-11-1 16:11
实现一个自定义的 Text 组件,里面把默认格式都设置好,要用到的位置使用自己的自定义组件就可以了。比如名 ...

Button {
                                id: control
                                text: qsTr("登 录")
                                font.wordSpacing: -0.2
                                font.pointSize: 20
                                implicitWidth: 220
                                implicitHeight: 70
                                anchors.top:text2.bottom
                                anchors.topMargin: 20

                                contentItem: StyledText {
                                    text: control.text
                                    font: control.font
                                    opacity: enabled ? 1.0 : 0.3
                                    horizontalAlignment: Text.AlignHCenter
                                    verticalAlignment: Text.AlignVCenter
                                    elide: Text.ElideRight
                                    color: control.down|| control.hovered ? "#ffffff" : "#ffffff"
                                }

                                background: Rectangle {
                                    implicitWidth: 130
                                    implicitHeight: 30
                                    opacity: enabled ? 1 : 0.3
                                    color: control.down|| control.hovered ? "#1ee781" : "#11d45e"
                                    radius: 30

                                }
                            }

为什么 “StyledText” 应用到按钮控件中,字体族就不是"Microsoft YaHei Light" 这个了呢?
回复

使用道具 举报

尚未签到

2019-11-5 14:38:50 显示全部楼层
像 StyledText 一样实现一个 StyledButton
回复

使用道具 举报

累计签到:94 天
连续签到:1 天
2019-11-6 15:58:28 显示全部楼层
本帖最后由 Sehin_春子 于 2019-11-6 16:01 编辑

在放图片的目录新建.qss文件:在本地新建mqss.txt(名字随你起),改变成后缀名为.qss。在qt添加现有文件,把mqss.qss添加进去,双击打开。写样式。
button类:

/设置所有按钮统一样式/
QPushButton{
background-color:blue;  / 设置为蓝色背景,这里结束要有分号/
}
QPushButton:pressed{
background-color:red;  /被按下时设置为红色背景。结束要有分号/
}
/如果你大部分按钮需要同一个样式,只有个别按钮需要特殊,可以用#设置某个名称的样式 ____比如我有个按钮对象名称是MyBtn,可以这样:/
QPushButton#Mybtn{
background-color:white;   / 只有MyBtn设置为白色背景,这里结束要有分号/
}
QPushButton#Mybtn:pressed{
background-color:blue;  / 只有MyBtn被按下是蓝色背景,这里结束要有分号/
}


/*其他也一样,需要写他的类名加个{},样式在{}里写。跟setStylesheet一样的.**重点是要在mainwindow.cpp添加qss文件读取的代码,以后设置样式就可以在qssl里设置而不需要每个按钮都加代码也不用给每个控件在设计师里添加***/

QFile file(":/Qss/resource/mqss.qss");  //这是我的路径,你要写你的
file.open(QFile::ReadOnly);
// 读取文件全部内容,使用tr()函数将其转换为QString类型
QString styleSheet = tr(file.readAll());
// 为QApplication设置样式表
qApp->setStyleSheet(styleSheet);


如果qss文件加载路径正确,样式表QPushButton大小写或者单词写错不会报错,只不过你的控件不会有样式显示,如果qss读取不成功,可以百度。
回复

使用道具 举报

累计签到:9 天
连续签到:1 天
2019-11-7 16:40:01 显示全部楼层

bool loadGlobalFonts(int fontSize , QGuiApplication *app)
{

    //将字体文件名传给addApplicationFont,得到字体的Id
    int fontId = QFontDatabase::addApplicationFont(APP_FONT_DIR);
    qDebug()<<"fontId = "<<fontId;
    if(fontId  <0)
        return false;
    //将字体Id传给applicationFontFamilies,得到一个QStringList,其中的第一个元素为新添加字体的family
    QString msyh = QFontDatabase::applicationFontFamilies (fontId).at(0);
    qDebug()<<"my font = "<<msyh<<"font size:"<<fontSize;
    QFont font(msyh,fontSize);
    //将此字体设为QApplication的默认字体
    app->setFont(font);
    return true;

}
在main函数里调用这个函数。字体路径自己修改。
回复

使用道具 举报

尚未签到

2020-12-21 14:34:36 显示全部楼层
qtd 发表于 2019-11-2 09:26
**** 作者被禁止或删除 内容自动屏蔽 ****

Text 是 Qt Quick Controls 1 的控件,不受 Qt Quick Controls 2 的样式控制,你应该把 Text 更换为 Label
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了