QT控件通过qss设置子控件的对齐方式、大小自适应等

一些复杂控件,是有子控件的,每个子控件,都可以通过qss的双冒号选择器来选中,进行独特的样式定义。很多控件都有子控件,太多了,后面单独写一篇文章来介绍各个控件的子控件。这里就随便来几个例子

例如下拉列表控件,右边有个下拉按钮(QComboBox::drop-down)就是子控件,这个下拉按钮里面还有一个箭头(QComboBox::down-arrow),也是子控件。

展开的下拉列表,每个条目(QAbstractItemView::item)也都是子控件。

又比如spinbox,有个上下箭头可以调整数值大小,这个上下箭头也是子控件。

QT控件通过qss设置子控件的对齐方式、大小自适应等_第1张图片

下面通过样式表,来调整这个spinbox的上下按钮的位置:

QSpinBox 
{
    border: 1px solid black;
	padding-left:5px;

}

QSpinBox::up-button 
{/*上按钮*/
    subcontrol-origin: border;/*以盒子模型的border区域为坐标系*/
    subcontrol-position: top right;/*位于border的右上角*/
    width: 16px;
    border: 3px solid green;/*绿边框*/
    background-color: red;/*红背景*/
}
QSpinBox::up-arrow 
{/*上按钮中的箭头 最好是用贴图*/
    background-color: white;/*这里图简便,就用白色方块代替了*/
    width: 5px;
    height: 5px;
}

QSpinBox::down-button 
{/*下按钮*/
    subcontrol-origin: border;
    subcontrol-position: left;/*border坐标系的左边*/
    width: 16px;
    border-image: url(:/images/spindown.png) 1;
    border: 3px solid blue;/*绿边框*/
	background-color: green;
}

 以上代码效果如下:

QT控件通过qss设置子控件的对齐方式、大小自适应等_第2张图片

如果想让上下按钮的高度自适应QSpinBox的高度怎么办?

答:需要一些简单的基础知识,定义位置需要知道坐标系和坐标,而坐标又分为绝对和相对(默认)。坐标值的定义比较直观,形如:left: 5px; right:1em; top:10pt;  bottom:20%; 上下左右都可以指定,但是注意,不要写出矛盾的语句。

下面我们看一下,在相对坐标系和绝对坐标系下,设置同样的坐标,效果有何区别:


QSpinBox::up-button 
{/*上按钮*/
    subcontrol-origin: border;/*以盒子模型的border区域为坐标系*/
    subcontrol-position: top right;/*位于border的右上角*/   
    border: 3px solid green;/*绿边框*/
    background-color: red;/*红背景*/
	width:20px;
	position:absolute;/*绝对坐标*/
	bottom:5px;/*距离坐标系底部5px*/
}

 

 以上左图是基于原先位置上移了5px,而右图是让按钮距离border底部5px(以为我们已经设置了以border为参考系)。 

理解了坐标系*(参考系)的概念,把红绿两个子控件的高度自适应QSpinBox的高度就简单了:

QSpinBox::down-button 
{/*下按钮*/
    subcontrol-origin: border;
    subcontrol-position: left;/*border坐标系的左边*/
    border-image: url(:/images/spindown.png) 1;
    border: 3px solid blue;/*绿边框*/
	background-color: green;
	width:20px;
	position:absolute;/*绝对参考系*/
	bottom:0px;/*距离坐标系底5px*/
}
QSpinBox::down-arrow 
{/*下按钮中的箭头*/
    background-color: white;
    width: 13px;/*用白色直线来绘制减号*/
    height: 3px;
}

 

 

 

 

你可能感兴趣的:(QT,QT/样式表qss,qt,qss,样式表)