13. Qt深入 样式表继承规则

1. 继承

样式表会在子对象 和派生类继承。

1.1 在子对象继承

cpp 复制代码
QWidget* w1 = new QWidget(this);
w1->setGeometry(0,0,300,300);

// w1设置QWidget样式为粉底,蓝边框
w1->setStyleSheet("QWidget{"
                  "border-width: 2px;"
                  "border-style: solid;"
                  "border-color: blue;"
                  "background-color: pink;}");

// w2为w1子对象 且是QWidget,继承w1样式表
QWidget* w2 = new QWidget(w1);
w2->setGeometry(0, 0, 50, 50);

运行结果:

2. 在派生类继承

w1设置QWidget样式表,在QWidget w1上创建QPushbutton btn,因为QPushbutton是QWidget的派生类,所以btn会继承w1样式

cpp 复制代码
QWidget* w1 = new QWidget(this);
w1->setGeometry(0,0,300,300);

// w1设置QWidget样式为粉底,蓝边框
w1->setStyleSheet("QWidget{"
                      "border-width: 2px;"
                      "border-style: solid;"
                      "border-color: blue;"
                      "background-color: pink;}");

// 在w1上创建button
QPushButton* btn = new QPushButton(w1);
btn->setGeometry(0,0,100,50);

运行结果:

3. 不在派生类继承

由于样式表会在派生类自动继承,而QWidget是几乎所有控件类的基类,所以在给QWidget设置样式表时,例如QPushButton等这些派生类都会自动继承QWidget的样式表,即使我们并不想让button使用QWidget的样式表,所以可以使用这种选择器:

cpp 复制代码
QWidget* w1 = new QWidget(this);
w1->setGeometry(0,0,300,300);

// w1设置QWidget样式为粉底,蓝边框
w1->setStyleSheet(".QWidget{"     //只给QWidget设置,不给其派生类设置
                  "border-width: 2px;"
                  "border-style: solid;"
                  "border-color: blue;"
                  "background-color: pink;}");

// 在w1上创建button
QPushButton* btn = new QPushButton(w1);
btn->setGeometry(0,0,100,50);

// 在w1上创建QWidget
QWidget* w2 = new QWidget(w1);
w2->setGeometry(0,200,100,50);

运行结果:可以看到,使用了 ".QWidget"选择器后,在w1上创建的QPushButton并没有继承 w1的样式表,而在 w1上创建的QWidget w2则继承了w1的样式表。

4. 其他的一些规则

相关推荐
沫璃染墨13 小时前
《Qt从零入门系列(十五):Qt线程安全与锁机制详解——从QMutex到RAII与读写锁实战》
开发语言·c++·qt·安全·交互·线程·qt6.3
小豆庄18 小时前
视频脱敏引擎的追踪难题:转场误判定、ID撞号和淡入窗口
qt·算法·目标检测·音视频·视频·敏捷流程
小灰灰搞电子20 小时前
Qt 中使用 QSettings 存储结构体数据详解
开发语言·qt
LaoWaiHang1 天前
关于Qt中鼠标左键事件被子控件截留的处理
qt
初阳7852 天前
【基于Qt5仿音乐播放器(一)】——项目准备
qt·1024程序员节
kaixin_learn_qt_ing2 天前
Qt开发工程师
qt
ShineWinsu2 天前
对于Qt:信号与槽的解析
c++·qt·gui·lambda·信号·信号与槽·槽函数
努力实干3 天前
Qt/C++ 模块化设计与工程组织
开发语言·c++·qt
Lhan.zzZ3 天前
Qt:动态库模块框架设计
开发语言·c++·qt
qq_401700414 天前
TCP 长连接、心跳包与断线自动重连设计:工业级通信的“不死鸟”架构
网络·qt·tcp/ip