1,简介
Qt中给窗体或控件添加样式表的方法,大体有以下几种:
1,在UI设计器(即Qt Designer)内添加,右键控件"改变样式表"或直接在属性内输入
2,对窗口或控件调用 setStyleSheet 接口
3,qApp->setStyleSheet 对整个app设置样式
4,项目中,一般将样式表内容写到文本文件,程序启动时再通过方法2或3加载
这样的好处是方便集中管理,修改样式也不用重新编译,还避免在代码中书写过长字符串不方便。
2,做法及效果
1,在ui设计器设置样式
该方法的好处是可以在输入样式表内容时检查格式是否有效,
另外可以直接预览窗口看到应用样式后的效果,如下图。
学习时可以使用该方法,一般项目内尽量少用,
因为以后很容易找不到写了哪里了,难以维护。
2,对窗口或控件调用setStyleSheet
比如对按钮调用:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//可以看到在代码中设置样式,为了方便阅读,使用了繁琐的Tab和换行
//因此除了特殊地方需要在代码追加修改样式,项目里一般建议在文本文件内写样式表
ui->btn2->setStyleSheet("QPushButton{\
background:#EE6AA7;\
border:1px solid #8B7E66;\
border-radius:5px;\
color:white;\
}\
QPushButton:hover{\
background:#FF6EB4;\
}\
QPushButton:pressed{\
background:#CD6090; \
}");
}
也可直接对MainWindow setStyleSheet, 一次性填入各种不同控件的样式。
因为样式表是可以继承到子窗口的
3,对app整体调用
样式便会对程序所有该类型控件生效:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
//QApplication对整体应用程序设置样式
a.setStyleSheet("QPushButton{\
background:#1C86EE;\
border:1px solid #8B7E66;\
border-radius:5px;\
color:white;\
}\
QPushButton:hover{\
background:#1E90FF;\
}\
QPushButton:pressed{\
background:#1874CD; \
}");
return a.exec();
}
4,从样式文件加载
一般我希望把样式文件写到.css后缀的文本文件中,因为qss与css的语法结构差不多,
一些文本编辑工具(如notepad++)可以识别.css格式,内容会显示得比较友好,方便编辑。
建议把这些css文件放到程序目录的单独的qss文件夹内,就像配置文件一样。
示例演示了给一个对话框加载样式文件的做法。
LoadQssFile函数由于是从一个公用的功能类抽出来的,所以窗口是作为参数传进去的。
#include "DlgQSS.h"
#include "ui_DlgQSS.h"
#include <QFile>
DlgQSS::DlgQSS(QWidget *parent) :
QDialog(parent),
ui(new Ui::DlgQSS)
{
ui->setupUi(this);
//加载外部样式表文件
LoadQssFile(this,"DlgQSS.css");
}
DlgQSS::~DlgQSS()
{
delete ui;
}
bool DlgQSS::LoadQssFile(QWidget* w,QString fileName)
{
//样式表文件
QString qssFile = QCoreApplication::applicationDirPath() + "\\qss\\" + fileName;
QFile file(qssFile);
if (file.open(QFile::ReadOnly))
{
QString qss = file.readAll();
w->setStyleSheet(qss);
file.close();
return true;
}
return false;
}
4,示例工程源码
源码下载:
链接:https://pan.baidu.com/s/1fij_mQgWlTPT4htarWT2Qg?pwd=3lb4
提取码:3lb4