【QT入门】Qt自定义控件与样式设计之qss的加载方式

本文介绍了Qt中QSS样式表的四种加载方式,包括在代码中动态设置、使用qss.h头文件、集成到qrc资源文件或外部文件以及通过命令行参数传递。作者还提供了具体示例,帮助读者理解和实践Qt界面设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

往期回顾

【QT入门】 Qt自定义控件与样式设计之QPushButton点击按钮弹出菜单-优快云博客

【QT入门】Qt自定义控件与样式设计之QProgressBar用法及qss-优快云博客

【QT入门】 Qt自定义控件与样式设计之QSlider用法及qss-优快云博客

 【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样式加载的几种方式的基本介绍

都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值