Qt——界面美化 QSS

界面美化 QSS

类似于网页前端的CSS,可以对界面的各种样式进行设置

需要注意,如果QSS和C++代码同时对同一个控件的同一个属性进行了设置,那么QSS的优先级更高

QSS 基本格式:

选择器 {
   
   
	属性名:属性值;
}

例如,将窗口内所有的QPushBUtton的文本设置成红色:

#include "widget.h"

#include "./ui_widget.h"

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) {
   
   
    ui->setupUi(this);

    ui->pushButton->setStyleSheet("QPushButton {color : rgb(200, 0, 100);}");
}

Widget::~Widget() {
   
    delete ui; }

在这里插入图片描述

设置样式的时候,是可以指定某个控件来设置的。指定控件之后,此时的样式就会针对这个指定的控件和这个控件的子控件同时生效

例如:

#include "widget.h"

#include "./ui_widget.h"

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) {
   
   
    ui->setupUi(this);

    this->setStyleSheet("QPushButton {color : rgb(200, 0, 100);}");
}

Widget::~Widget() {
   
    delete ui; }

在这里插入图片描述


全局样式

通过main函数内部构造的QApplication类,进行全局样式设置

  • 如果设置了全局样式,然后在某个控件里面又设置了新的样式(不冲突),那么这个控件的样式就会叠加。即层叠性
  • 如果设置了全局样式,然后在某个控件里面又设置了同样的的样式,那么局部样式就会覆盖全局样式。即局部样式优先级高于全局样式
  • 所以,实际开发中,就可以设置通用的全局样式,来统一风格。如果需要对界面的某个控件进行微调,就可以使用局部样式

例如:

#include <QApplication>

#include "widget.h"

int main(int argc, char *argv[]) {
   
   
    QApplication a(argc, argv);
    Widget w;

    a.setStyleSheet("QPushButton {color : green;}");

    w.show();
    return a.exec();
}

// widget.cpp
#include "widget.h"

#include "./ui_widget.h"

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) {
   
   
    ui->setupUi(this);

    ui->pushButton_1->setStyleSheet("background-color : white;");		// 叠加性
    ui->pushButton_2->setStyleSheet("color : rgb(200, 0, 100);}");		// 局部样式优先级高于全局样式
}

Widget::~Widget() {
   
    delete ui; }

在这里插入图片描述


样式和代码分离

如果涉及到的样式比较多,那么将其和C++代码混合明显是不合适的。

我们可以把样式代码拎出来,放到单独的文件中,后续可以直接让C++代码来读取并加载文件内容

Qt Designer中直接集成了上述功能,允许我们把样式直接写到 **.ui**文件里,并支持实时预览

在这里插入图片描述


选择器

选择器 示例 说明
全局选择器 * 选择所有的 widget.
类型选择器 (type selector) QPushButton 选择所有的 QPushButton 和 其子类 的控件.
类选择器 (class selector) .QPushButton 选择所有的 QPushButton 的控件. 不会选择子类.
ID 选择器 #pushButton_2 选择 objectNamepushButton_2 的控件.
后代选择器 QDialog QPushButton 选择 QDialog 的所有后代(子控件, 孙子控件等等) 中的 QPushButton.
子选择器 QDialog > QPushButton 选择 QDialog 的所有子控件中的 QPushButton.
并集选择器 QPushButton, QLineEdit, QComboBox 选择 QPushButton, QLineEdit, QComboBox 这三种控件.
(即接下来的样式会针对这三种控件都生效).

类型选择器

例如:

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) {
   
   
    ui->setupUi(this);

    QString style = "QWidget {color : rgb(200, 50, 100);}";
    ui->layoutWidget->setStyleSheet(style);
}

通过类型选择器,将layoutWidget下的,所有QWidget及其子类的控件的文本设置颜色

效果:

在这里插入图片描述


类选择器

类选择器和类型选择器的区别是,类选择器不会选择指定控件类型的子类

例如:

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) {
   
   
    ui->setupUi(this);

    QString style = ".QWidget {color : rgb(200, 50, 100);}";
    ui->layoutWidget->setStyleSheet(style);
}

通过类选择器,将layoutWidget下的QWidget类型的控件的文本设置颜色

效果:

在这里插入图片描述


ID选择器

ID选择器只针**对传入的****objectName**的空间生效

例如:

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) {
   
   
    ui->setupUi(this);

    QString style = "#pushButton_1 {color : rgb(200, 50, 100);}";
    ui->layoutWidget->setStyleSheet(style);
}

使用ID选择器,对objectNamepushButton_1的控件,设置字体颜色

效果:

在这里插入图片描述


并集选择器

通过传入多个类型,样式会对传入的所有类型生效

例如:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Forward♞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值