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. 其他的一些规则

相关推荐
小短腿的代码世界20 小时前
Qt日志系统深度解析:从qDebug到企业级日志框架
开发语言·qt
Morwit1 天前
QML组件之间的通信方案(暴露子组件)
c++·qt·职场和发展
金色熊族1 天前
解析QTransform的用法
qt
追烽少年x1 天前
Qt多线程编程:QThread与QtConcurrent的对比与应用
qt
小短腿的代码世界2 天前
Qt实时盈亏计算深度解析:从持仓数据到动态盈亏展示
开发语言·qt
Python私教2 天前
GenericAgent PySide6 桌面应用深度解析:悬浮按钮 + 聊天面板的原生 Qt 方案
开发语言·数据库·qt
用户805533698032 天前
现代Qt开发教程(新手篇)1.11——定时器
c++·qt
小短腿的代码世界2 天前
Qt券商接口封装深度解析:统一API设计与多源适配
开发语言·qt·单元测试
T0uken2 天前
基于 vcpkg 与 LLVM-MinGW 的 Qt6 静态链接开发方案
c++·windows·qt
Ulyanov2 天前
《现代 Python 桌面应用架构实战:PySide6 + QML 从入门到工程化》 开发环境搭建与工具链极简主义 —— 拒绝臃肿,构建工业级基座
开发语言·python·qt·ui·架构·系统仿真