在Qt Designer中新建图像界面,放置两个QWidget,命名为widget_1和widget_2;两个QPushButton,pushButton_1和pushButton_2。
它们的父子从属关系如下:
设置widget_1的样式表:
QWidget{
background-color: rgb(221, 221, 221);
border: 2px solid rgb(160,100, 100);
}
这个样式表的含义为:widget_1中,所有的QWidget都按照指定的样式表显示。
由于QPushButton是QWidget的子类,所以pushButton_1和pushButton_2被隐含修改了样式表。
有些时候,这并不是我们期望的结果,我不希望QPushButton与QWidget是同样的显示效果。
解决办法:
1、单独改变子类的样式表:将widget_1的样式表设置为:
QWidget{
background-color: rgb(221, 221, 221);
border: 2px solid rgb(160,100, 100);
}
/*类型为QPushButton的部件重新定义*/
QPushButton{
background-color: rgb(150, 150, 150);
border: 2px solid rgb(100,160, 100);
}
这里,将隶属于widget_1的类型为QPushButton的所有部件全部定义了新的显示特性。
2、 单独改变某一个小部件的样式表:将widget_1的样式表设置为:
QWidget{
background-color: rgb(221, 221, 221);
border: 2px solid rgb(160,100, 100);
}
/*pushButton_1单独定义*/
#pushButton_1{
background-color: rgb(150, 150, 150);
border: 2px solid rgb(100,160, 100);
}
“#pushButton_1”的含义是将pushButton_1单独设置样式表。需要注意的是,采用这种单独设置的办法,如果被改变的对象还有子部件,子部件并不跟随父部件的改变而改变。
比如,将widget_1的样式表设置为:
QWidget{
background-color: rgb(221, 221, 221);
border: 2px solid rgb(160,100, 100);
}
/*widget_2单独定义*/
#widget_2{
background-color: rgb(150, 150, 150);
border: 2px solid rgb(100,160, 100);
}
单独改变了widget_2,但是隶属于widget_2的pushButton_1和pushButton_2并没有改变。
利用这个原理,就有了下面的方法:
3、将父部件单独设置样式表:
将widget_1的样式表设置为:
/*父部件widget_1单独定义*/
#widget_1{
background-color: rgb(221, 221, 221);
border: 2px solid rgb(160,100, 100);
}
/*父部件widget_2单独定义*/
#widget_2{
background-color: rgb(150, 150, 150);
border: 2px solid rgb(100,100, 160);
}
/*所有的QPushButton类定义*/
QPushButton{
background-color: lightgreen;
}
由于将两级父容器部件单独设置了样式表,所以隶属于它们的子部件不再继承父部件的样式表。
4、使用.class{}的方法:
.class{}的方法,只修改指定的类,其派生的子类不改变。
将widget_1的样式表设置为:
/*QWidget类型单独定义*/
.QWidget{
background-color: rgb(221, 221, 221);
border: 2px solid rgb(160,100, 100);
}
/*所有的QPushButton类定义*/
QPushButton{
background-color: lightgreen;
}
5、使用后代选择器:
创建下图的父子结构:
将widget_1的样式表设置为:
/*QWidget类型单独定义*/
.QWidget{
background-color: rgb(221, 221, 221);
border: 2px solid rgb(160,100, 100);
}
/*使用后代选择器定义一部分QPushButton类*/
#widget_3 QPushButton{
background-color: lightgreen;
border: 2px solid black;
border-radius: 5px;
}