Qt易忘样式表总结

前言

在使用Qt框架开发软件时,为了美观和更好的用户体验,需要为各种控件设置样式。一些通用且简单的样式如背景色、边框、字体字号等,基本上写过Qt样式的猿们都能记住,但是像日历、树形控件、Tab页控件等复合控件的样式则很难凭记忆写出来。所以本篇除了总结Qt设置样式的几种方式之外,还总结了几个复合控件的样式设置。

1、Qt设置样式的几种方式

  • 在代码中设置控件的样式(最不推荐)
  • 在ui文件中设置样式
  • 将所有样式写到一个或几个qss文件中,根据需要通过setStyleSheet函数加载(推荐)

2、几种复合控件的样式设置

QTableWidget

当用到QTableWidget时,我们可以在UI文件中拖入一个,其基本的显示属性可以在UI中设置,也可以写代码设置。在下图中可以看到一个QTableWidget,添加了表头和3条数据,右侧是基本属性,黑色粗体部分是已经设置过的,非粗体是默认设置。

在这里插入图片描述
在qss文件中添加样式如下

/*设置表头样式*/
QHeaderView::section 
{
     background-color: rgb(50,200,255);
     color: white;
     padding-left: 4px;
     border: 1px solid #6ce0ff;
}

QHeaderView::section:checked
{
    background-color: rgb(0,200,255);
}

/*设置表格样式*/
QTableView {
   show-decoration-selected: 1;
}

QTableView::item {
    height: 30px;
    text-align:center;
}

QTableView::item:selected 
{
  	border: 1px solid #6a6ea9;
    color:white;
}

QTableView::item:selected:!active 
{
   background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
                               stop: 0 #ABAFE5, stop: 1 #8588B2);
}

QTableView::item:selected:active 
{
   background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
                               stop: 0 #6a6ea9, stop: 1 #888dd9);
}

QTableView::item:hover 
{
    background: rgb(50,100,200);
    color:white;
}

运行效果如下图所示。
在这里插入图片描述

QCalendarWidget

QCalendarWidget 控件一般与QDateEdit 或 QDateTimeEdit 控件配合使用,在UI中拖入一个QDateEdit控件,勾选 calendarPopup,这样在点击日期控件右侧按钮时就会弹出日历控件。UI图如下所示
在这里插入图片描述
设置QDateEdit 和 QCalendarWidget 的样式

/*设置QDateEdit样式*/
QDateEdit
{
	min-height:45px;
	border: 1px solid rgba(0,200,255);
}
QDateEdit::drop-down
{
	background-color : transparent;
	image: url(:/images/rili.png);
	min-width: 40px;
	min-height:40px;
}
  
/*设置QCalendarWidget样式*/
QCalendarWidget  QWidget#qt_calendar_navigationbar
{
	background-color: #2F5F8E;
}

QCalendarWidget QToolButton
{
	background-color:transparent; 
	min-width:23px; 
	max-width:23px; 
	min-height:23px; 
	max-height:23px;
}

QCalendarWidget QToolButton:hover
{
	background-color:rgb(134,193,251); 
	color:black;  
}

QCalendarWidget QToolButton#qt_calendar_monthbutton
{
	background-color:transparent; 
	min-width:50px; 
	max-width:50px; 
	min-height:23px; 
	max-height:23px;
}

QCalendarWidget QToolButton#qt_calendar_monthbutton:hover ,#qt_calendar_yearbutton:hover
{
	background-color:rgb(134,193,251, 100); 
	color:black;  
}

QCalendarWidget QToolButton#qt_calendar_prevmonth
{
	background-color:transparent; 
	min-width: 30px;
	min-height: 30px;
	qproperty-icon:url(:/images/zuojiantou.png)

}

QCalendarWidget QToolButton#qt_calendar_nextmonth
{
	background-color:transparent; 
	min-width: 30px;
	min-height: 30px;
	qproperty-icon: url(:/images/youjiantou.png);
}

QCalendarWidget QToolButton#qt_calendar_monthbutton,#qt_calendar_yearbutton
{
	min-width: 70px;
	color: rgb(134,193,251); 
	font: 14px;
}

运行效果如下图所示
在这里插入图片描述

QTreeWidget

设置QTreeWidget样式

QTreeView::branch:has-siblings:!adjoins-item
{
    border-image: url(:/images/stylesheet-vline.png) 0;
}

QTreeView::branch:has-siblings:adjoins-item 
{
   	border-image: url(:/images/stylesheet-branch-more.png) 0;
}

QTreeView::branch:!has-children:!has-siblings:adjoins-item 
{
	border-image: url(:/images/stylesheet-branch-end.png) 0;
}

QTreeView::branch:has-children:!has-siblings:closed,
QTreeView::branch:closed:has-children:has-siblings
{
    border-image: none;
    image: url(:/images/stylesheet-branch-closed.png);
}

QTreeView::branch:open:has-children:!has-siblings,
QTreeView::branch:open:has-children:has-siblings 
{
	border-image: none;
	image: url(:/images/stylesheet-branch-open.png);
}

运行效果:
在这里插入图片描述
在这里插入图片描述

样式表中的图片名称与对应的图片如下图所示,实际应用时按照下图所示的效果切图,替换样式表中对应的图片即可。
在这里插入图片描述

QSpinBox

设置QSpinBox样式


 QSpinBox 
{
	min-height: 40px;
	min-width: 80px;
	padding-right: 5px; 
	background-color: rgb(255, 159, 94);
	border-width: 3;
	font-size: 14px;
	color: blue;
}

QSpinBox::up-button
{
	subcontrol-origin: border;
	subcontrol-position: top right; /* position at the top right corner */
	width: 20px; /* 16 + 2*1px border-width = 15px padding + 3px parent border */
	border-image: url(:/images/shangjiantou.png) 1;
	border-width: 1px;
}

QSpinBox::down-button 
{
	subcontrol-origin: border;
	subcontrol-position: bottom right; /* position at bottom right corner */
	width: 20px;
	border-image: url(:/images/xiajiantou.png) 1;
	border-width: 1px;
	border-top-width: 0;
}

运行效果:
在这里插入图片描述

QComboBox

设置QComboBox样式如下

QComboBox 
{
	border: 1px solid rgb(131, 255, 0);
	border-radius: 3px;
	padding: 1px 18px 1px 3px;
	min-width: 200px;
	min-height: 40px;
	border-image: url(:/images/comboxbg.png);
}

QComboBox:editable 
{
	background: yellow;
}

QComboBox:!editable, QComboBox::drop-down:editable 
{
	background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
                                stop: 0 #E1E1E1, stop: 0.4 #DDDDDD,
                                stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3);
}

/* QComboBox gets the "on" state when the popup is open */
QComboBox:!editable:on, QComboBox::drop-down:editable:on 
{
	background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
	                           stop: 0 #D3D3D3, stop: 0.4 #D8D8D8,
	                           stop: 0.5 #DDDDDD, stop: 1.0 #E1E1E1);
}

QComboBox:on 
{ /* shift the text when the popup opens */
	padding-top: 3px;
	padding-left: 4px;
}

QComboBox::drop-down
{
	min-width: 40px;
	min-height:40px;
	subcontrol-origin: padding;
	subcontrol-position: top right;
	width: 15px;
	border-left-width: 1px;
	border-left-color: darkgray;
	border-left-style: solid; /* just a single line */
	border-top-right-radius: 3px; /* same radius as the QComboBox */
	border-bottom-right-radius: 3px;
}

QComboBox::down-arrow 
{
	min-height: 20px;
	min-width: 20px;
	image: url(:/images/xiajiantou.png);
}

QComboBox::down-arrow:on 
{ /* shift the arrow when popup is open */
	top: 1px;
	left: 1px;
}

QComboBox QAbstractItemView 
{
	border: 2px solid darkgray;
	selection-background-color: lightgray;
}

运行效果
在这里插入图片描述

以上就是本篇的所有内容了,有疑问的朋友欢迎评论区留言讨论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凝望星辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值