QT January 15, 2020

【QT】全局换肤

Words count 3.5k Reading time 3 mins. Read count 0

前言

给控件设置样式的方式常用的有两种:

  1. 在 QT Designer 中,选中需要设置样式的控件,右键–>改变样式表,即可以给控件设置样式
  2. 另外一种是在代码中动态设置,调用控件的setStyleSheet函数,为控件设置样式
    这两种方式都是针对单个控件的,假如需要对整个应用进行换肤呢?这时候可以使用.qss为后缀的文件进行统一设置

步骤

  1. 创建.qss文件
  2. 将需要实现换肤功能的控件的样式配置全部写在该文件中
  3. 在main函数中,调用QApplication的setStyleSheet函数,即可实现整体的换肤功能

具体代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// 1. qss的部分示例
QLabel#versionLabel
{
font-size:20px;
font-family:"Microsoft YaHei";
font-weight:400;
color:rgba(51,51,51,1);
}
QPushButton#okBtn, #cancelBtn, #perBtn
{
border: 1px solid #ababab;
border-radius: 18px;
background: transparent;
color: black;
font-size: 16px;
font-family:"Microsoft YaHei";
}
QWidget#splashPage
{
background-image: url(./Resources/Image/ThemeOne/Splash.png);
}

// 2. 换肤
QApplication app;
QFile file(BaseUtil::modulePath() + "/Global.qss");
if (file.open(QIODevice::ReadOnly))
{
QString theme(file.readAll());
app.setStyleSheet(theme);
file.close();
}

其他补充

  1. 在上边的例子中,我是将qss文件放在了程序的执行路径,你也可以选择将qss文件放到资源文件中
  2. 要注意的是,放在资源中和放在程序外,样式中使用的图片路径是不一致的。例如上个例子中的background-image配置的路径方式是不同的
0%