往期回顾
【QT入门】 Qt自定义控件与样式设计之QPushButton点击按钮弹出菜单-CSDN博客
【QT入门】Qt自定义控件与样式设计之QProgressBar用法及qss-CSDN博客
【QT入门】 Qt自定义控件与样式设计之QSlider用法及qss-CSDN博客
【QT入门】Qt自定义控件与样式设计之qss的加载方式
QSS(Qt Style Sheets),Qt框架中用于定义界面样式的一种机制,它类似于CSS。加载方式还是有好几种,只是我们平时在用的时候常见的都是直接在代码里写或者建一个qss.h文件。下面对每种样式做简单介绍:
一、在代码中直接设置
可以在程序代码中直接设置QSS样式,通过setStyleSheet方法将QSS样式应用到指定的控件上。这种方式适用于需要动态改变样式的情况。也是我最常用的方式。
示例:
widget->setStyleSheet("QPushButton { background-color: red; }");
二、新建qss.h头文件
用QString或R字符串把样式写进去,然后在某个需要样式的文件里添加头文件,引用相关样式即可
这个方式用的也很多,适用于样式代码过多,而且复用性强的情况。
示例:
qss.h
#ifndef QSS_H
#define QSS_H#include <string>using namespace std;string hslider_qss = R"(QSlider{background-color: #FF0000;border-style: outset;border-radius: 1px;}QSlider::groove:horizontal{height: 12px;background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #B1B1B1, stop:1 #c4c4c4);margin: 2px 0}QSlider::handle:horizontal{background: QRadialGradient(cx:0, cy:0, radius: 1, fx:0.5, fy:0.5, stop:0 white, stop:1 green);width: 16px;height: 16px;margin: -5px 6px -5px 6px;border-radius:11px;border: 3px solid #ffffff;})";#endif // QSS_H
由于我的qss样式是写在R字符串里的,所以这里用到一个fromStdString方法去转换
三、写到qss文件里,读文件
1、加到qrc文件里,编译到exe里面
将QSS样式文件(通常以.qss为后缀)添加到程序的资源文件中,然后QFile QTextStream等类读取QSS文件内容,并应用到相应的控件上。
示例:
QFile qssFile(":/stylesheets/mystyle.qss");
if (qssFile.open(QFile::ReadOnly | QFile::Text)) {QTextStream stream(&qssFile);qApp->setStyleSheet(stream.readAll());qssFile.close();
}
2、写在程序外部,暴露给用户
将QSS样式文件保存在程序所在目录或指定目录中,暴露给用户,然后通过绝对路径或相对路径加载QSS文件。
示例:
先是在项目文件夹里创建一个.qss文件,然后在项目创建resource,像添加图片一样把qss文件添加进去最后在widget里对样式文件进行读取
QFile file(":/res/skin.qss");QString lineStr;if(file.open(QIODevice::ReadOnly | QIODevice::Text)){//转换成流去读取QTextStream txtInput(&file);//在没有读到最后一行的情况下,就一直读while(!txtInput.atEnd()){lineStr += txtInput.readLine(); //逐行读取qss代码}}file.close();this->setStyleSheet(lineStr);
四、通过命令行参数加载
可以在启动程序时通过命令行参数指定QSS样式文件的路径,然后在程序中读取并应用该样式。这个目前来说用的比较少,我基本不用了。
示例:
myapp -stylesheet path/to/mystyle.qss
int main(int argc, char *argv[]) {QApplication app(argc, argv);if (app.arguments().contains("-stylesheet")) {QString qssFile = app.arguments().at(app.arguments().indexOf("-stylesheet") + 1);QFile file(qssFile);if (file.open(QFile::ReadOnly | QFile::Text)) {QTextStream stream(&file);app.setStyleSheet(stream.readAll());file.close();}}// Other initialization codereturn app.exec();
}
以上,就是qss样式加载的几种方式的基本介绍
都看到这里了,点个赞再走呗朋友~
加油吧,预祝大家变得更强!