QT加载多个QSS样式文件的优雅写法!
这是一个目录
- 前言
- 加载QSS样式文件三种写法
-
- 第一种:界面少,只有一个样式文件
- 第二种:项目稍微复杂,有多个样式文件
- 第三种:界面很多,一个界面类对应一个QSS样式文件
- 总结
前言 使用QT写界面样式,就一定要涉及到加载QSS样式文件,随着软件界面不断增加,样式文件也不断增加,所以本次记录一下一个加载多个样式文件且一劳永逸的办法。
加载QSS样式文件三种写法 注:(项目复杂界面多,QSS样式文件也是多个,推荐第三种写法。)
加载QSS样式文件,肯定是要进行读文件的操作,这一步必须要有。但回顾自己的开发历程,加载QSS文件大致有三种写法,虽然都要读文件,但是还是很有区别的:
第一种:界面少,只有一个样式文件 在项目比较小的时候,没有几个界面,直接将所有样式写在一个样式文件中就全部搞定。大致如下:
QFile file(":/qss/style.qss");
file.open(QIODevice::ReadOnly);
QString stylesheet = QLatin1String(file.readAll());
file.colse();
qApp->setStyleSheet(stylesheet);
第二种:项目稍微复杂,有多个样式文件 随着软件功能复杂,界面增多,就不能写在一个样式文件中,基本上一个界面类单独配置一个QSS文件,增强可读性,也方便后期查阅修改。
所以当一个资源文件下有多个QSS样式文件时,可以写一个函数用来专门读取文件内容,如下:
void LoadStyle::LoadStyleFile(QString strStyle)
{
QFile qss(strStyle);
qss.open(QFile::ReadOnly);
qApp->setStyleSheet(qss.readAll());
qss.close();
}
在主界面初始化时,调用这个函数,并把资源文件也就是QSS文件路径传进去:
m_cLoadStyle.LoadStyleFile(":/CTreeWidgetPro/Resource/Qss/CTreeWidgetPro.qss");
m_cLoadStyle.LoadStyleFile(":/CTreeWidgetPro/Resource/Qss/CustomItem.qss");
其中m_cLoadStyle是加载资源文件类的对象,直接多次调LoadStyleFile(QString strStyle)这个函数也可实现。
第三种:界面很多,一个界面类对应一个QSS样式文件 首先一个类对应一个样式文件时,为了确保唯一性,会在每一个样式属性前面加上类名就可以了,举个例子:
CTreeWidgetPro QPushButton#m_pBtn
{
background:red;
width:40px;
height:20px;
}
就像这样式的,如果你担心类名重复,还可以加上命名空间的名称,就不做具体展示了。
加载所有QSS文件大致思路是将QSS文件所在的文件夹下的所有样式文件都一次获取,循环读文件里面的内容,然后保存在一个字符串变量中,最后直接调用qApp->setStyleSheet()这个函数。
void LoadStyle::LoadStyleFile()
{
QString strDirPath = ":/CTreeWidgetPro/Resource/Qss";
QStringList strListStyleFiles = QDir(strDirPath).entryList(QDir::Files);
QString strStyle = GetAllStyle(strListStyleFiles, strDirPath);
qApp->setStyleSheet(strStyle);
}
QString LoadStyle::GetAllStyle(QStringList strListStyleFiles, QString strDirPath)
{
if (!strDirPath.endsWith("/"))
{
strDirPath.append("/");
}
QString strStyle;
for (auto strFileName : strListStyleFiles)
{
QFile fileRead(strDirPath + strFileName);
if (fileRead.open(QFile::ReadOnly))
{
strStyle += QLatin1String(fileRead.readAll());
}
fileRead.close();
}
return strStyle;
}
LoadStyleFile()函数中,strDirPath变量是QSS文件所在的文件夹;strListStyleFiles保存了文件夹下面所有文件的文件名称;
GetAllStyle()函数中,在for循环中处理每一个文件名,将文件夹路径+文件名就组成了完整了QSS文件路径,在进行读操作,将所有的文件读完之后保存并返回。
m_cLoadStyle.LoadStyleFile();
最后只要在主界面调用这个LoadStyleFile(); 函数即可:
m_cLoadStyle是加载资源文件类的对象,不管资源文件夹下面多少个QSS样式文件,都只需要调用一次即可,后续资源文件中继续添加新的QSS文件,这部分代码也不用进行修改。
总结 【QT加载多个QSS样式文件的优雅写法!】随着写的界面越来越多,发现规范真的很重要,目前想到的可读性最强的方式就是一个界面类对应一个QSS这种文件,如果那个界面类样式不对了,直接能定位到对应的的QSS文件中,就很方便!记录至此,兄弟们,一起加油,一起变强!
推荐阅读
- pytorch入门|pytorch学习笔记——3.6~3.7Pytorch中定义网络的方式以及模型保存和加载方法
- XS运动营养饮料超强商机
- 彻底理解线程
- imx6的uboot调试总结
- QT|QTreeWidget样式qss
- 手把手带你安装多个node版本
- Android(jar包的混淆以及多个jar包的融合)
- 如何通过|如何通过 SAP ABAP OData $expand 操作在同一个 HTTP 请求中返回多个节点的数据试读版
- vue|vue3 骨架屏+上拉加载更多封装
- 打造自己的下拉刷新+上滑加载框架