1,简介
Qt中给窗体或控件添加样式表的方法,大体有以下几种:
1,在ui设计器即Qt Designer内添加,右键控件"改变样式表"或直接在属性内输入
2,对窗口或控件调用 setStyleSheet 接口(继承自QWidget),或对app调用setStyleSheet(QApplication)
3,项目中,一般将样式表内容写到文本文件,程序启动时再通过方法2加载
这样方便管理,调整样式也不用重新编译,还避免在代码中书写过长字符串。
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:hover:pressed{\
background:#CD6090; \
}");
}
对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:hover:pressed{\
background:#1874CD; \
}");
return a.exec();
}
3,从样式文件加载
一般我把样式文件写到.css格式后缀的文本文件中,因为notepad++可以识别该格式打开,能很方便的带颜色显示和编辑。
放到程序目录的单独的qss文件夹内,就像配置文件一样。
一般通用的样式,写到一个主css文件,供整个程序加载;
一些特殊样式就给所在窗口单独建一份样式文件,对该窗口加载。
所附示例演示了给一个对话框加载样式文件的做法。
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/1_s0a_9pXYBrFB2LS_dCxGg 提取码: sgk2