简介
本文介绍一种将样式表与Qt控件分离,并批量加载资源文件中qss文件
的方法。
通过此种方法,可以将各种控件的样式表通过不同的样式文件分离开,更改时查找起来更方便。同时使程序结构更加清爽。
程序文件结构如下图:
qss文件内容如图:
使用方法
1、方法定义:
定义一个类,提供静态方法加载样式表,类的定义如下:
#include <QFile>
#include <QApplication>
#include <QDirIterator>
/*!
\brief
该类提供两个静态函数,用来设置系统的样式表。
\class CustomHelper CustomHelper.h "CustomHelper.h"
*/
class CustomHelper
{
public:
/*!
\brief
设置指定样式文件中自定义的样式。
\fn setCustomStyle
\param qssFile
样式表文件的路径,可以为资源文件路径和实际路径
*/
static void setCustomStyle(const QString &qssFile) {
QFile qss(qssFile);
qss.open(QFile::ReadOnly | QIODevice::Text);
QString styleSheet = qss.readAll();
qApp->setStyleSheet(styleSheet);
qss.close();
}
/*!
\brief
设置自定义的样式。该函数会遍历资源文件中所有以.qss结尾的文件,拼装在一起,然后调用setStyleSheet来设置样式
\fn setCustomStyle
*/
static void setCustomStyle() {
QDirIterator it(":",QDirIterator::Subdirectories);
QString str_qssFile;
QString str_styleSheet;
QFile file;
while (it.hasNext()) {
str_qssFile = it.next();
if (str_qssFile.right(4) == ".qss"){
file.setFileName(str_qssFile);
file.open(QIODevice::ReadOnly | QIODevice::Text);
str_styleSheet.append(file.readAll());
file.close();
}
}
if (!str_styleSheet.isEmpty())
qApp->setStyleSheet(str_styleSheet);
}
};
2、使用方法
#include "MainWindow.h"
#include <QApplication>
#include <CustomHelper.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// CustomHelper::setCustomStyle(":/QSS/QPushButton.qss");
CustomHelper::setCustomStyle();
MainWindow w;
w.show();
return a.exec();
}
3、注意事项
3.1 样式表注释
样式表文件中不能使用//
进行注释,否则会造成样式表解析失败。
3.2 样式表高亮开启
在模式中增加 *.qss
, 与前方用;
隔开
如有疑问与好想法,欢迎与我交流
Email:[email protected]