往期回顾
【QT入门】 Qt自定义控件与样式设计之QPushButton点击按钮弹出菜单-优快云博客
【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 code
return app.exec();
}
以上,就是qss样式加载的几种方式的基本介绍
都看到这里了,点个赞再走呗朋友~
加油吧,预祝大家变得更强!