QT样式表--父控件设置样式表后对子控件产生影响,控制styleSheet的作用范围

20201201后记,后来发现,控制作用范围,是有专业术语的,叫做“CSS选择器”。各位自行搜索学习这个关键词就可以学到所有相关内容

-----------------------------------------

先简单总结一下,以方便查阅,作用范围有以下几种:

作用于所有子控件

    { background:argb(0, 0, 0, 0%) }
    【本控件以及所有的子控件】的背景色全都被改变   

作用于属性值=某值的控件

QCheckBox[checked=true]
只对被勾选的checkbox生效。不同控件所支持的属性名和值,需查阅各个控件的Properties章节

作用于此类控件,以及同类型的子孙控件

    QTextEdit{background:argb(0, 0, 0, 0%)}
    只对【本控件以及子控件】中的QTextEdit类型控件生效

只作用于此类控件,不影响同类的子孙控件

在类型名前加个小数点即可

.QTextEdit{background:argb(255, 0, 0, 0%)}

只作用于某个类的直接子类

用大于号,只有包含在GroupBoxA控件内部的一级ButtonB控件被选中
GroupBoxA > ButtonB

只作用于某个类的子孙类

用空格,GroupBoxA类型控件内部的ButtonB控件,都被选中

GroupBoxA ButtonB

只作用于某个类的某个控件

选中指定的某个控件,需要通过ID,也即变量名来指定。

例如某个按钮名为closeBtn,可以这样选中:

GroupBoxA > #closeBtn   只有GroupBoxA内部的名为closeBtn的一级按钮被选中

GroupBoxA  #closeBtn   GroupBoxA内部的名为closeBtn的按钮被选中

#closeBtn   不管这个按钮在哪个窗口或控件中,只要名字为closeBtn就被选中

四、只作用于某一个或几个控件

原理就是直接指定变量名

    QTextEdit#edTest{background:argb(0, 0, 0, 0%)}
或者  #edTest{background:argb(0, 0, 0, 0%)}
或者 #lineEditSend, #textEditDebug{background-color: rgb(255, 0, 0);}

   只对变量名(实质是QObject::objectName,如下图)为edTest的QTextEdit类型控件生效,

下面看一些例子:

我在ui中拖了一个QWdget作为容器,在里面放入了一个GroupBox,groupBox中又放了几个按钮等,我对最外层的QWidget设置样式表:

结果发现,里面所有的子控件、孙子控件的边框都变样了,如何避免这一情况?其实官方帮助手册里已经告诉我们了:

就在帮助示例文档中,见下图

只要在类名后面用#号串接变量名就行了,修改一下:效果如下,子控件已经不受影响了

这篇写的不错:

Qt之QSS选择器_qt qss_敲代码的雪糕的博客-CSDN博客

Qt中,可以使用样式表Stylesheets)来设置多个控件的同一样式样式表似于CSS,用于定义控件的外观。通过将样式表应用到父控件,可以使所有子控件继承该样式。以下是一些常用的方法: 1. **设置单个控件样式**: ```cpp QPushButton *button = new QPushButton("Click Me"); button->setStyleSheet("background-color: red; color: white;"); ``` 2. **设置多个控件样式**: 如果你有多个控件需要设置相同的样式,可以分别调用每个控件的`setStyleSheet`方法: ```cpp QPushButton *button1 = new QPushButton("Button 1"); QPushButton *button2 = new QPushButton("Button 2"); QPushButton *button3 = new QPushButton("Button 3"); button1->setStyleSheet("background-color: red; color: white;"); button2->setStyleSheet("background-color: red; color: white;"); button3->setStyleSheet("background-color: red; color: white;"); ``` 3. **通过父控件设置样式**: 如果这些控件有共同的父控件,可以将样式表应用到父控件上,这样所有子控件都会继承该样式: ```cpp QWidget *parentWidget = new QWidget; QPushButton *button1 = new QPushButton("Button 1", parentWidget); QPushButton *button2 = new QPushButton("Button 2", parentWidget); QPushButton *button3 = new QPushButton("Button 3", parentWidget); parentWidget->setStyleSheet("QPushButton { background-color: red; color: white; }"); ``` 4. **使用样式表文件**: 你也可以将样式表保存到一个文件中,然后在代码中加载该文件: ```cpp QFile file(":/stylesheets/styles.qss"); if(file.open(QIODevice::ReadOnly)) { QString styleSheet = QLatin1String(file.readAll()); parentWidget->setStyleSheet(styleSheet); file.close(); } ``` 通过以上方法,你可以方便地为多个控件设置相同的样式,提高代码的可维护性和复用性。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值