Qt样式表(5):使用样式表设置按钮的外观
本文为原创文章,转载请注明出处,或注明转载自“黄邦勇帅(原名:黄勇)
本文出自本人原创著作《Qt5.10 GUI完全参考手册》网盘地址:
https://pan.baidu.com/s/1iqagt4SEC8PUYx6t3ku39Q
《C++语法详解》网盘地址:https://pan.baidu.com/s/1dIxLMN5b91zpJN2sZv1MNg
若对C++语法不熟悉,建议参阅本人所著《C++语法详解》一书,电子工业出版社出版,该书语法示例短小精悍,对查阅C++知识点相当方便,并对语法原理进行了透彻、深入详细的讲解,可确保读者彻底弄懂C++的原理,彻底解惑C++,使其知其然更知其所以然。此书是一本全面了解C++不可多得的案头必备图书。
13.10.1 基本规则
子控件使用subcontrol-position和subcontrol-origin属性来确定在父级中的位置。
另外需要注意伪状态的情形,比如对于垂直滚动条将一直处于:vertical伪状态,因此对垂直滚动条样式表的设置都需要指定:vertical伪状态。
部件的渲染顺序:部件被视为彼此叠加的子控件的层次结构,比如,QComboBox的向下箭头子控件的父级是下拉子控件,下拉子控件的父级是QComboBox部件本身,因此,QComboBox先绘制下拉子控件,然后是向下箭头子控件。绘制QComboBox样式表的顺序如下:
渲染QComboBox,即QComboBox{….}
渲染下拉子控件,即QComboBox::drop-down{…}
渲染向下箭头,即QComboBox::drop-arrow{…}
13.10.2 设置各部件样式表的方法
注:以下仅列了部件部分支持的属性、伪状态、子控件
1、按钮相关
示例13.20:QPushButton和QCheckBox(效果见图13-35、图13-36、图13-37)
#include<QtWidgets>
int main(int argc, char *argv[]){ QApplication aa(argc,argv);
QWidget w;
QPushButton *pb=new QPushButton("AAA",&w); pb->move(20,20); pb->resize(200,90);
QPushButton *pb1=new QPushButton("BBB",&w); pb1->move(230,20);
//为按钮pb添加菜单
QMenu *pm=new QMenu("AAA"); pm->addAction("111"); pm->addAction("222"); pb->setMenu(pm);
//把pb和pb1设置为自动默认按钮
pb->setAutoDefault(true); pb1->setAutoDefault(true);
//注意:pbx不是自动默认按钮
QPushButton *pbx=new QPushButton("DDD",&w); pbx->move(310,20);
QCheckBox *pb2=new QCheckBox("CCC",&w); pb2->move(20,120); pb2->resize(200,90);
aa.setStyleSheet(
"QPushButton:default {background-color:red;}" //默认按钮的背景色为红色
"QPushButton:open {background-color:rgb(111,111,1);}" //选中按钮时的背景色为黄色
"QPushButton::menu-indicator {" //设置按钮的菜单指示器
"border:2px solid green;" //绿色2个像素宽的实线边框边界线
//加载图片作为菜单指示器,读者可加载符合实际需要的图片
"background-image:url(F:/1i.png);"
"subcontrol-position:left center;" //设置子控件的位置
"width:33px;height:33px;}" //设置子控件的大小
"QCheckBox{background-color:rgb(111,111,1);" //复选按钮的背景颜色为黄色
"spacing:55px;}" //设置文字和复选指示器之间的距离为55像素
//设置复选指示器的背景颜色(红色)及大小
"QCheckBox::indicator{background-color:red;width:33;height:33;}"
//设置复选指示器处于选中状态时的背景色为绿色
"QCheckBox::indicator:checked{ background-color:green;}"
);
w.resize(400,333); w.show(); return aa.exec(); }
示例13.21:QSpinBox(效果见图13-38)
#include<QtWidgets>
int main(int argc, char *argv[]){ QApplication aa(argc,argv);
QWidget w;
QSpinBox *pb3=new QSpinBox(&w); pb3->move(20,20); pb3->resize(200,90);
aa.setStyleSheet(
"QSpinBox::up-button {" //设置向上按钮
"subcontrol-position:left center;" //子控件位于左侧居中
"background-color:red;" //背景色为红色
"width:50px;height:90;}" //子控件大小
"QSpinBox::up-arrow {" //设置向上箭头的背景色(绿色),大小,位置
"background-color:green; width:33;height:33;"
"subcontrol-position:right bottom;}"
"QSpinBox::down-button {background-color:red;width:50px;height:90;}" //向下按钮
"QSpinBox::down-arrow {background-color:green;width:33;height:33;}" //向下箭头
);
w.resize(400,333); w.show(); return aa.exec();}
本文作者:黄邦勇帅(原名:黄勇)