使用Qss设置QT程序界面的样式和皮肤
1 使用Qss设置QT程序界面的样式和皮肤
1.1 Qss的功能
Qt程序界面中控件的背景图片、大小、字体颜色、字体类型、按钮状态变化等属性可以通过Qss文件来设置,美化UI界面。实现界面和程序的分离,快速切换皮肤。
1.2 QSS基本属性设置
Qss的强大在于组合功能的强大,这里只是简单介绍基本功能,将简单功能组合起来才能实现好看的效果。
Qss背景属性(Background)
|
属性 |
描述 |
CSS |
|
在一个声明中设置所有的背景属性。 |
1 |
|
|
设置背景图像是否固定或者随着页面的其余部分滚动。 |
1 |
|
|
设置元素的背景颜色。 |
1 |
|
|
设置元素的背景图像。 |
1 |
|
|
设置背景图像的开始位置。 |
1 |
|
|
设置是否及如何重复背景图像。 |
1 |
|
|
规定背景的绘制区域。 |
3 |
|
|
规定背景图片的定位区域。 |
3 |
|
|
规定背景图片的尺寸。 |
3 |
QSS边框属性(Border 和 Outline)
|
属性 |
描述 |
CSS |
|
在一个声明中设置所有的边框属性。 |
1 |
|
|
在一个声明中设置所有的下边框属性。 |
1 |
|
|
设置下边框的颜色。 |
2 |
|
|
设置下边框的样式。 |
2 |
|
|
设置下边框的宽度。 |
1 |
|
|
设置四条边框的颜色。 |
1 |
|
|
在一个声明中设置所有的左边框属性。 |
1 |
|
|
设置左边框的颜色。 |
2 |
|
|
设置左边框的样式。 |
2 |
|
|
设置左边框的宽度。 |
1 |
|
|
在一个声明中设置所有的右边框属性。 |
1 |
|
|
设置右边框的颜色。 |
2 |
|
|
设置右边框的样式。 |
2 |
|
|
设置右边框的宽度。 |
1 |
|
|
设置四条边框的样式。 |
1 |
|
|
在一个声明中设置所有的上边框属性。 |
1 |
|
|
设置上边框的颜色。 |
2 |
|
|
设置上边框的样式。 |
2 |
|
|
设置上边框的宽度。 |
1 |
|
|
设置四条边框的宽度。 |
1 |
|
|
在一个声明中设置所有的轮廓属性。 |
2 |
|
|
设置轮廓的颜色。 |
2 |
|
|
设置轮廓的样式。 |
2 |
|
|
设置轮廓的宽度。 |
2 |
|
|
定义边框左下角的形状。 |
3 |
|
|
定义边框右下角的形状。 |
3 |
|
|
简写属性,设置所有 border-image-* 属性。 |
3 |
|
|
规定边框图像区域超出边框的量。 |
3 |
|
|
图像边框是否应平铺(repeated)、铺满(rounded)或拉伸(stretched)。 |
3 |
|
|
规定图像边框的向内偏移。 |
3 |
|
|
规定用作边框的图片。 |
3 |
|
|
规定图片边框的宽度。 |
3 |
|
|
简写属性,设置所有四个 border-*-radius 属性。 |
3 |
|
|
定义边框左上角的形状。 |
3 |
|
|
定义边框右下角的形状。 |
3 |
|
|
box-decoration-break |
�0�2 |
3 |
|
向方框添加一个或多个阴影。 |
3 |
Box 属性
|
属性 |
描述 |
CSS |
|
如果内容溢出了元素内容区域,是否对内容的左/右边缘进行裁剪。 |
3 |
|
|
如果内容溢出了元素内容区域,是否对内容的上/下边缘进行裁剪。 |
3 |
|
|
规定溢出元素的首选滚动方法。 |
3 |
|
|
围绕由 rotation-point 属性定义的点对元素进行旋转。 |
3 |
|
|
定义距离上左边框边缘的偏移点。 |
3 |
QSS字体属性(Font)
|
属性 |
描述 |
CSS |
|
在一个声明中设置所有字体属性。 |
1 |
|
|
规定文本的字体系列。 |
1 |
|
|
规定文本的字体尺寸。 |
1 |
|
|
为元素规定 aspect 值。 |
2 |
|
|
收缩或拉伸当前的字体系列。 |
2 |
|
|
规定文本的字体样式。 |
1 |
|
|
规定是否以小型大写字母的字体显示文本。 |
1 |
|
|
规定字体的粗细。 |
1 |
QSS外边距属性(Margin)
|
属性 |
描述 |
CSS |
|
在一个声明中设置所有外边距属性。 |
1 |
|
|
设置元素的下外边距。 |
1 |
|
|
设置元素的左外边距。 |
1 |
|
|
设置元素的右外边距。 |
1 |
|
|
设置元素的上外边距。 |
1 |
CSS 内边距属性(Padding)
|
属性 |
描述 |
CSS |
|
在一个声明中设置所有内边距属性。 |
1 |
|
|
设置元素的下内边距。 |
1 |
|
|
设置元素的左内边距。 |
1 |
|
|
设置元素的右内边距。 |
1 |
|
|
设置元素的上内边距。 |
1 |
CSS 定位属性(Positioning)
|
属性 |
描述 |
CSS |
|
设置定位元素下外边距边界与其包含块下边界之间的偏移。 |
2 |
|
|
规定元素的哪一侧不允许其他浮动元素。 |
1 |
|
|
剪裁绝对定位元素。 |
2 |
|
|
规定要显示的光标的类型(形状)。 |
2 |
|
|
规定元素应该生成的框的类型。 |
1 |
|
|
规定框是否应该浮动。 |
1 |
|
|
设置定位元素左外边距边界与其包含块左边界之间的偏移。 |
2 |
|
|
规定当内容溢出元素框时发生的事情。 |
2 |
|
|
规定元素的定位类型。 |
2 |
|
|
设置定位元素右外边距边界与其包含块右边界之间的偏移。 |
2 |
|
|
设置定位元素的上外边距边界与其包含块上边界之间的偏移。 |
2 |
|
|
设置元素的垂直对齐方式。 |
1 |
|
|
规定元素是否可见。 |
2 |
|
|
设置元素的堆叠顺序。 |
2 |
CSS 文本属性(Text)
|
属性 |
描述 |
CSS |
|
设置文本的颜色。 |
1 |
|
|
规定文本的方向 / 书写方向。 |
2 |
|
|
设置字符间距。 |
1 |
|
|
设置行高。 |
1 |
|
|
规定文本的水平对齐方式。 |
1 |
|
|
规定添加到文本的装饰效果。 |
1 |
|
|
规定文本块首行的缩进。 |
1 |
|
|
text-shadow |
规定添加到文本的阴影效果。 |
2 |
|
控制文本的大小写。 |
1 |
|
|
设置文本方向。 |
2 |
|
|
规定如何处理元素中的空白。 |
1 |
|
|
设置单词间距。 |
1 |
|
|
规定标点字符是否位于线框之外。 |
3 |
|
|
规定是否对标点字符进行修剪。 |
3 |
|
|
text-align-last |
设置如何对齐最后一行或紧挨着强制换行符之前的行。 |
3 |
|
向元素的文本应用重点标记以及重点标记的前景色。 |
3 |
|
|
规定当 text-align 设置为 "justify" 时所使用的对齐方法。 |
3 |
|
|
规定文本的轮廓。 |
3 |
|
|
规定当文本溢出包含元素时发生的事情。 |
3 |
|
|
向文本添加阴影。 |
3 |
|
|
规定文本的换行规则。 |
3 |
|
|
规定非中日韩文本的换行规则。 |
3 |
|
|
允许对长的不可分割的单词进行分割并换行到下一行。 |
3 |
1.3 Qss过滤选择器和优先级
1.3.1 Qss选择器
Qss有一些规则用来设置符合规则的控件名称,通常是按照通用属性设置一类控件,对某个有特殊要求的在特别设置。避免大量的重复设置。分为
- 通配选择器:* ;所有的控件属性设置
*
{
}
- 类型选择器:QPushButton ; 匹配所有QPushButton和其子类的实例
QPushButton
{
}
3.类选择器: .QPushButton ; 匹配所有QPushButton的实例,但是并不匹配其子类。这是与CSS中的类选择器不一样的地方,注意前面有一个点号
.QPushButton
{
}
4.属性选择器:QPushButton[flat="false"]; 匹配所有flat属性是false的QPushButton实例,注意该属性可以是自定义的属性,不一定非要是类本身具有的属性
QPushButton[flat="false"]
{
}
5.ID选择器: #myButton; 匹配所有id为myButton的控件实例,这里的id实际上就是objectName指定的值,针对特定名称的控件设置属性。
QPushButton#myButton1, #myButton2
{
}
6.后代选择器: QDialog QPushButton ; 所有QDialog容器中包含的QPushButton,不管是直接的还是间接的。
QDialog QPushButton
{
}
7.子选择器: QDialog > QPushButton; 所有QDialog容器下面的QPushButton,其中要求QPushButton的直接父容器是QDialog
QDialog > QPushButton
{
}
1.3.2 Qss优先级
上面虽然用了选择器,单肯定会有重复的设置,那么系统怎么去排列这些设置的优先级。原则:宽泛的设置优先级低于更加针对具体的设置,文件上面的设置优先级低于文件下面的设置。
1.4 Qss开发步骤
(1) 添加资源文件qrc,在资源里添加qss文件,图片皮肤文件等。


(2) 分界面在qss文件中设置各控件的属性值
Qss中配置一般按照如下格式配置
控件类型#控件名称1,控件名称2,控件名称3
{
控件属性;
}
按钮属性设置
按钮为background背景图片的形式

QToolButton#addTimeBtn{//常规属性设置
font-size: 12px;
background: url(:/addanddeduct/image/add-l-16-normal.png) no-repeat center center;//背景图片资源中的路径,不重复,居中、居中显示。
background-repeat:no-repeat;//图片较小时,不显示个。
border-style: flat;//扁平
border-left:1px solid #CCCCCC;//边框线条粗细、虚实、颜色
}
QToolButton#addTimeBtn:hover{//按钮高亮属性设置
background: url(:/addanddeduct/image/add-l-16-hov.png) no-repeat center center;
background-repeat:no-repeat;
border-style: flat;
border-left:1px solid #CCCCCC;
}
QToolButton#addTimeBtn:pressed{//按钮按下时的属性设置
background: url(:/addanddeduct/image/add-l-16-pressed.png) no-repeat center center;
border-style: flat;
border-left:1px solid #CCCCCC;
}
按钮为qproperty-icon图片加文字的形式

/*删除报警按键设置*/
QToolButton#delAlarmBtn{
font-size: 12px;
border-style:inset;
border:0px solid #E5E5E5;
qproperty-icon: url(:/qss/image/lidaicon-h-trashcan.svg);
qproperty-iconSize: 16px 16px;//图片大小
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;//文字和图片样式
}
QToolButton#delAlarmBtn:pressed{
color:#1C72DD;
border: 0px solid #1C72DD;
font-size: 12px;
border-style:inset;
qproperty-icon: url(:/qss/image/lidaicon-h-trashcan-pressed.svg);
qproperty-iconSize: 16px 16px;
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
}
QToolButton#delAlarmBtn:hover{
color:#4C99F8;
font-size: 12px;
border-style:inset;
border: 0px solid #4C99F8;
qproperty-icon: url(:/qss/image/lidaicon-h-trashcan-pressed.svg);
qproperty-iconSize: 16px 16px;
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
}
QCheckBox{
spacing: 5px;
color: black;
border-style: flat;
}
复选框QCheckBox属性设置

QCheckBox::indicator
{
width: 17px;
height: 17px;
image: url(:/checkImage/image/checkImage/check-nor.png);
}
QCheckBox::indicator:hover {
image: url(:/checkImage/image/checkImage/check-hov.png);
}
QCheckBox::indicator:checked{
image: url(:/checkImage/image/checkImage/check-sel.png);
}
QComboBox属性设置

QComboBox::drop-down:hover:pressed
{//下拉按钮设置
subcontrol-position:center right;//按钮位置
image:url(:/qss/image/angle-down.png);//按钮图片
}
QComboBox:drop-down
{
subcontrol-position:center right;
image:url(:/qss/image/angle-down-l-16.png);
}
QComboBox
{// QComboBox本身属性设置
border: 1px solid #CCCCCC;
border-radius: 2px;
}
QComboBox::hover
{//鼠标移上去,边框变蓝色
/* 边框宽度,线条样式,颜色 */
border:1px solid #2080F7;
/* 内边框 */
padding:1px 18px 1px 3px;
min-width:100px;
font:12px;
}
QComboBox QAbstractItemView
{//下拉列表中的选项设置
border: 1px solid #2080F7;
selection-//选中背景色
}
/*水平滚动条*/
QScrollBar:horizontal{
width:8px;
padding-top:0px;
padding-bottom:0px;
padding-right:0px;
padding-left:0px;
background: #000000;
border-radius:100px;
}
QScrollBar::handle:horizontal{
background:#E5E5E5;
width:8px;
border: 0px solid #E5E5E5;
min-height:20px;
border-radius:100px;
}
QScrollBar::handle:horizontal:normal{
background:#F5F5F5;
width:8px;
border: 0px solid #E5E5E5;
border-radius:100px;
}
QScrollBar::handle:horizontal:hover{
background:#E6E6E6;
width:8px;
border: 0px solid #E5E5E5;
border-radius:100px;
}
QScrollBar::handle:horizontal:pressed{
background:#CCCCCC;
width:8px;
border: 0px solid #E5E5E5;
border-radius:100px;
}
QScrollBar滚动条属性设置
/*垂直滚动条*/

QScrollBar:vertical
{
width:8px; //宽度
padding-top:4px; //内上边距设置
padding-bottom:0px;
padding-right:0px;
padding-left:0px;
background: #000000;
border-radius:100px;
}
QScrollBar::handle:vertical{ //滑块属性设置
background:#E5E5E5;
width:8px;
border: 0px solid #E5E5E5;
min-height:20px;
border-radius:100px;
}
QScrollBar::handle:vertical:normal{
background:#F5F5F5;
width:8px;
border: 0px solid #E5E5E5;
border-radius:100px;
}
QScrollBar::handle:vertical:hover{
background:#E6E6E6;
width:8px;
border: 0px solid #E5E5E5;
border-radius:100px;
}
QScrollBar::handle:vertical:pressed{
background:#CCCCCC;
width:8px;
border: 0px solid #E5E5E5;
border-radius:100px;
}
QScrollBar{
background: #000000;
}
QScrollBar::pressed
{
background: #000000;
}
QTableWidget属性设置

QTableWidget#tableWidget::Item
{
border:0px solid #E5E5E5;
border-bottom:1px solid #E5E5E5;
font-size: 12px;
color: #4C4C4C;
font - family: Microsoft YaHei;
alternate- /*行交替颜色*/
selection-background-color: #E9F2FE; /*选中行背景颜色*/
}
QTableWidget#tableWidget::Item:selected
{
background:#4C99F8;
}
QTableWidget表头属性设置
QHeaderView::section{
font-size: 12px;
color: #000000;
font - family: Microsoft YaHei;
font-weight: bold;
height:36px;/*表头高度*/
border-style: flat;
border-bottom:1px solid #E5E5E5;
border-top:0px solid #E5E5E5;
alignment: left;//左对齐
}
QTabWidget切换界面Tab属性设置

QTabWidget::pane //边框设置
{
border-top: 1px solid #E5E5E5;
border-left:1px solid #E5E5E5;
position: absolute;
font-size: 14px;
}
QTabWidget::tab-bar {
border-bottom: 2px solid #E5E5E5;
border-left:1px solid #E5E5E5;
alignment: left;
font-size: 14px;
}
QTabBar::tab {//切换按钮设置
border: none;
border-bottom-color: #C2C7CB; /* same as the pane color */
border-top-left-radius: 4px;//上左交界处的圆角
border-top-right-radius: 4px;
min-width: 8ex;
padding: 2px;
font-size: 14px;
}
QTabBar::tab:hover {
color:#2080F7;//选中高亮
}
QTabBar::tab:selected {
color:#2080F7;
border-bottom: 2px solid #2080F7;//下边框线条属性
font-weight:bold;//加粗
}
(3) 将qss文件添加到步骤(1)中添加的qrc资源文件中,注意每次修改之后都要重新加入。否则不生效。
(4) 在代码中访问qss文件,读取文件内容,通过setstylesheet函数设置属性
QByteArray CSkinCtrl::ReadAllContents(const QString& dir_name)
{
QByteArray content;
//获取路径下所有文件,如果是qrc路径呢?
QStringList file_name_list = QDir(dir_name).entryList(QDir::Files);
//将所有的读取的文件内容汇总到content
for each (QString file_name in file_name_list)
{
QFile file(dir_name + file_name);
if (file.open(QIODevice::ReadOnly))
{
content += file.readAll();
file.close();
}
}
//遍历子文件夹中的文件
QStringList dir_name_list = QDir(dir_name).entryList(QDir::Dirs);
for each (QString dir in dir_name_list)
{
content += ReadAllContents(dir_name + dir + "/");
}
return content;
}
调用读取函数,用qApp->setStyleSheet设置
QString gui_qss_path = ":/qss/iVMSGUIToolkit/";
QString client_qss_path = ":/qss/qss/";
qApp->setStyleSheet(ReadAllContents(gui_qss_path) + ReadAllContents(client_qss_path));
自己编了一个股票监控软件,有兴趣的朋友可以下载;
下载地址:
1.0.3版本(修复大盘指数崩溃缺陷)下载地址:
链接:https://pan.baidu.com/s/1BJcTp-kdniM7VE9K5Kd3vg 提取码:003h
使用Qss设置QT程序界面的样式和皮肤的更多相关文章
- 芯灵思Sinlinx A64开发板设置qt程序自启动
开发平台 芯灵思Sinlinx A64 内存: 1GB 存储: 4GB 开发板详细参数 https://m.tb.cn/h.3wMaSKm 对于开发板开机启动程序的设置可以这样做通过串口连接开发板 v ...
- 修改Linux桌面高分屏下QT程序界面的缩放
问题 Linux下的高分屏在Gnome.KDE中有缩放因子一说,但是对QT程序(常用如 WPS.网易云音乐等)无效,这里只是简记修改QT程序的缩放方法 解决 su #切换root用户 cp /etc/ ...
- QSS为Qt程序添加不一样的样式
添加 QSS 样式文件 在 Qt 项目中新建一个或使用已有的 Qt Resource File,在资源文件下面新建一个普通文件,命名为 Light.qss: 为 Light.qss 添加如下内容: 这 ...
- 设置Qt程序在Windows开机后自动运行
(转自:http://blog.csdn.net/weiren2006/article/details/7443362) 主要原理是修改Windows的注册表来实现的,Qt的QSettings提供了访 ...
- ubuntu 设置qt程序开机启动
1.建立一个桌面文件,forklift-app.desktop Name填写程序的名字 Exec执行程序的路径 [Desktop Entry] Version=1.0 Name=forklift-ap ...
- 【Qt开发】设置Qt应用程序图标
[Qt开发]设置Qt应用程序图标 标签:[Qt开发] 首先,准备一个图标,例如:zx.ico,并新建一个文本文档,在里面添加一行: IDI_ICON1 ICON DISCARDABLE"zx ...
- Qt之界面实现技巧-- 窗体显示,绘制背景,圆角,QSS样式
转自 --> http://blog.sina.com.cn/s/blog_a6fb6cc90101dech.html 总结一下,在开发Qt的过程中的一些技巧!可遇而不可求... 一.主界面 1 ...
- 菜鸟学Windows Phone 8开发(4)——设置应用程序样式
本系列文章来源MSDN的 面向完全新手的 Windows Phone 8 开发 本文地址:http://channel9.msdn.com/Series/Windows-Phone-8-Develo ...
- Windows Phone 8初学者开发—第6部分:设置应用程序的样式
原文 Windows Phone 8初学者开发—第6部分:设置应用程序的样式 Source Code: http://aka.ms/absbeginnerdevwp8 PDF Version: ht ...
随机推荐
- 被fancybox坑的心路历程
今天项目中需要使用fancybox来展示图片,但是使用中发现fancybox没起作用,点击图片直接刷新了页面! fancybox的原理是通过给a标签绑定事件,使得a标签不在是直接跳转链接,而是把链接中 ...
- setfacl 设置文件访问控制列表
setfacl 设置文件访问控制列表 用法: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ... 参数: -m, --modify=acl 更改文件的访问控 ...
- DDoS防御方案
转自:http://netsecurity.51cto.com/art/201211/368930.htm 深入浅出DDoS攻击防御应对篇:DDoS防御方案 谈到DDoS防御,首先就是要知道到底遭受了 ...
- golang BDD testcase framework.
BDD What is Behaviour Driven Development and why should I care? Behaviour Driven Development (BDD) i ...
- iOS 允许后台任务吗?
个人整理 1,用户层: 低电量模式 App后台数据刷新 的开关会影响App后台运行 2, 10分钟时间 后台任务: 在AppDelegate中加入以下代码:不受1影响 - (void)applic ...
- Python3 tkinter基础 Canvas create_text 在画布上添加文字
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Matplotlib 知识点整理
本文作为学习过程中对matplotlib一些常用知识点的整理,方便查找. 强烈推荐ipython 无论你工作在什么项目上,IPython都是值得推荐的.利用ipython --pylab,可以进入Py ...
- 解决Win10 Git图标不显示问题
升级系统到win10 1803版本以后发现TortoiseGit的忽略图标不显示了 开始以为是版本问题,将TortoiseGit版本进行了升级还是不行 网上查找以后发现 Windows Explore ...
- 【做题】CF196E. Opening Portals 排除无用边&最小生成树
题意:给出一个有\(n\)个结点,\(m\)条边的连通无向图,边有边权,等于经过这条边所需的时间.有\(k\)个点设有传送门.一开始,所有传送门关闭.你从\(1\)号点出发,每当你到达一个有传送门的点 ...
- 【配置】log4j.properties 详解与配置步骤
一.Log4j基本使用方法 Log4j由三个重要的组件构成:[日志信息的优先级],[日志信息的输出目的地],[日志信息的输出格式]. 日志信息的优先级从高到低有ERROR.WARN. INFO.DEB ...