【Qt开发】QT样式表单 qss的样式优化
QT样式表单
QT的样式表单允许我们在对程序不做任何代码上的更改的情况下轻松改变应用程序的外观。
其思想来源于网页设计中的CSS,即可以将功能设计和美学设计分开。
它的语法和概念和HTML CSS也是差不多的。
其原理可简单理解为: QT内部存在一个CSS语法解析器,我们将我们的样式控制以CSS语法定义到外部文件,CSS语法解析器解析后在调用相应的功能模块以完成样式变化。(其实这部分功能我们完全可以通过代码实现,只是这么做既麻烦而且一旦更改会很不方便)
比如: 我在CSS定义字体颜色和大小,那么CSS语法解析器解读出我的意图后,可能就会调用freetype模块来实现此功能。
好处: 1.将功能设计和美学设计分开
2.CSS设计资源多,查找容易
说明:QT Style 样式语法虽然和CSS语法差不多,但是其功能是其子集,在使用QT style时需具备CSS语法知识
CSS语法学习:http://www.w3school.com.cn/h.asp
CSS 参考手册:http://www.w3school.com.cn/cssref/index.asp
基本语法
1. 样式表单由一系列样式规则组成。每条规则可以分成两部分: 选择器和声明

选择器表示规则作用到哪些控件上;声明则详细说明了是什么规则。
2. Qt的样式表语法不区分大小写,所以color,Color,coLor,coloR都表示同样的颜色属性。但是指代类的类名的时候,是区分大小写的。
3. 多个选择器可以并列使用,它们之间用逗号隔开,例如:
QPushButton,QLineEdit, QComboBox{ color: red }
4. 声明部分也可以有多个并列,之间用分号隔开。当我们要设置的选择器有多个属性的时候,就需要并列多个声明,例如:
QPushButton{ color: red; background-color: white }
这条样式规则让按钮的字体变成红色,同时背景色变成白色。

选择器类别
Qt样式表单支持所有在CSS2中定义的选择器类型,下面介绍几种最为常用的选择器定义。
|
全局选择器 |
* |
选中所有的Widget |
|
特定类型选择器 |
QPushButton |
选中所有QPushButton以及它派生出来的子类的对象 |
|
属性选择器 |
QPushButton[flat="false"] |
选中所有flat属性为false的按钮 |
属性选择器
可用于QT中所有具有toString方法的属性,例如QPushButton的text、checked等属性。
当属性是一个QStringList时,可以用~=这个符号来匹配其中的某一项。
因为属性往往是动态的,当属性更改了的时候,需要调整样式表,通常做法是删除样式表,再重新加载
选择器类别
|
类选择器 |
QPushButton |
选中所有QPushButton的对象,但不包括其子类 |
|
ID选择器 |
QPushButton#okButton |
选中所有object name是okButton的QPushButton对象 |
|
子控件选择器 |
QDialog QPushButton |
选中Qdialog上的所有QPushButton子控件(直接子控件,间接子控件 |
|
嫡子控件选择器 |
QDialog > QPushButton |
选中所有Qdialog的直接孩子QPushButton |
精细控制(子控件)
对于比较复杂的控件,往往由多个子控件构成,比如QComboBox则由文本框和下拉按钮构成,对于QT STYLE 允许我们分别对子控件进行样式设定,这就大大增强了样式的灵活性
举例:QComboBox的下拉点击按钮设置背景图片:
QComboBox::drop-down { image:url(dropdown.png) }

关于子控件更多信息与使用方法可以访问
http://qt-project.org/doc/qt-5/stylesheet-examples.html#customizing-qcombobox
伪状态控制
根据具体控件的状态不同,选择器也可以有不同的状态,依次对应控件在不同状态的现实效果
基本写法:
1. 伪状态和选择器类名之间,用一个冒号分隔。
QPushButton:hover { color: white }
2. 伪状态也可以反向选择。
例如:当我们要设置除了鼠标悬停状态外其他所有状态的字体颜色,则可以像下面这样设置:QRadioButton:!hover { color: red }
3. 伪状态也可以并列,之间用冒号连接,表示伪状态之间用AND计算:
QCheckBox:hover:checked { color: white }
QPushButton:hover:!pressed { color: blue; }
4. 伪状态之间可以用OR计算:
QCheckBox:hover, QCheckBox:checked { color:white }
5. 伪状态可以和子控件合起来使用:
QComboBox::drop-down:hover { image:url(dropdown_bright.png) }
STYLE基础知识的说明
我们控制STYLE主要是将STYLE添加到控件上,通过控制控件不同状态的STYLE以达到整体的显示效果
那对于控件,我将其分解为以下几部分来理解
Ø 从层次上来说:
控件可分为前景与背景
前景:多包含文件,图片等内容
背景:多包含图片,图形等内容
Ø 从结构上来说:
由于QT style是模拟CSS的布局结构,因此其满足CSS的盒子模型
从里到外的4个区域分别是:
1: content
2: padding
3: border
4: margin

通过控制一个控件的前景,背景内容已经结构上的4个区域,我们就可以达到对一个控件为所欲为的控制
QT如何下使用QSS
1. 定义样式文件

2. 将样式文件添加到资源中

3. 代码端加载样式文件

CSS基本功能
CSS的强大在于组合功能的强大,这里只是简单介绍基本功能,将简单功能组合起来才能实现好看的效果。
CSS 背景属性(Background)
|
属性 |
描述 |
CSS |
|
在一个声明中设置所有的背景属性。 |
1 |
|
|
设置背景图像是否固定或者随着页面的其余部分滚动。 |
1 |
|
|
设置元素的背景颜色。 |
1 |
|
|
设置元素的背景图像。 |
1 |
|
|
设置背景图像的开始位置。 |
1 |
|
|
设置是否及如何重复背景图像。 |
1 |
|
|
规定背景的绘制区域。 |
3 |
|
|
规定背景图片的定位区域。 |
3 |
|
|
规定背景图片的尺寸。 |
3 |
CSS 边框属性(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 |
3 |
|
|
向方框添加一个或多个阴影。 |
3 |
Box 属性
|
属性 |
描述 |
CSS |
|
如果内容溢出了元素内容区域,是否对内容的左/右边缘进行裁剪。 |
3 |
|
|
如果内容溢出了元素内容区域,是否对内容的上/下边缘进行裁剪。 |
3 |
|
|
规定溢出元素的首选滚动方法。 |
3 |
|
|
围绕由 rotation-point 属性定义的点对元素进行旋转。 |
3 |
|
|
定义距离上左边框边缘的偏移点。 |
3 |
CSS 字体属性(Font)
|
属性 |
描述 |
CSS |
|
在一个声明中设置所有字体属性。 |
1 |
|
|
规定文本的字体系列。 |
1 |
|
|
规定文本的字体尺寸。 |
1 |
|
|
为元素规定 aspect 值。 |
2 |
|
|
收缩或拉伸当前的字体系列。 |
2 |
|
|
规定文本的字体样式。 |
1 |
|
|
规定是否以小型大写字母的字体显示文本。 |
1 |
|
|
规定字体的粗细。 |
1 |
CSS 外边距属性(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 |
|||
|
设置元素的堆叠顺序。 |
||||
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 |
【Qt开发】QT样式表单 qss的样式优化的更多相关文章
- python全栈开发 * 表格标签 表单标签 css 引入方式 * 180807
html部分 一.表格标签<table> 1.一个表格<table>由每行<tr>组成的,每行是由<td>组成的. 注意: 一个表格是由行组成的(行是由 ...
- 利用jquery.validate以及bootstrap的tooltip开发气泡式的表单校验组件
表单校验是页面开发中非常常见的一类需求,相信每个前端开发人员都有这方面的经验.网上有很多成熟的表单校验框架,虽然按照它们默认的设计,用起来没有多大的问题,但是在实际工作中,表单校验有可能有比较复杂的个 ...
- iOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View Debugging
1.表单键盘遮挡 应用场景为一个collectionView上有多个textfield.textView供用户填写信息. 之前输入项较少时,采取的方法比较粗暴,didSelectItemAtIndex ...
- html5 表单样式 表单验证1 2 3
html5 表单样式 ie9以下不支持 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- Servlet程序开发--Servlet 与 表单
servlet程序: doPost方法时为了防止表单提交时post方式的问题.否则只能处理get请求 package org.lxh.servletdemo ; import java.io.* ; ...
- Django系列之form渲染表单后css样式丢失
最通用的form写法 我们经常看各大网站上写这样的form写法 class SYSAdminPhysicalForm(forms.ModelForm): ''' this form for idc's ...
- vue基础-动态样式&表单绑定&vue响应式原理
动态样式 作用:使用声明式变量来控制class和style的值 语法: :class/:style 注意:尽可能不要把动态class和静态class一起使用,原因动态class起作用的时间会比较晚,需 ...
- SNF软件开发机器人-子系统-表单-表单设计
表单设计 在我们做程序时总要对表单的内容进行设计,然而对控件位置等信息的调整总是麻烦的,还常常容易出错.SNF软件机器人完美的解决了这个问题. 1.效果展示: 2.使用说明: (1)打开页面,选中开发 ...
- spring boot 开发 提交form表单出错
提交表单时,字段有的没有值,springboot 会报错. org.springframework.validation.BindException: org.springframework.vali ...
随机推荐
- springboot-mybatis配置(xml)/springboot-jpa配置
#springboot-mybatis配置(xml) spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource. ...
- SpringBoot之持久化框架
在之前的 Spring学习之旅(十二)--持久化框架 中我们介绍了 JPA 的使用,今天我们就来了解下另一种持久化框架 Mybatis. 一.集成 Mybatis 1.1 准备工作 新建用户表 CRE ...
- 4.华为路由交换技术_IP路由选择原理(上)
初始化时,路由表上只有直连路由 查看路由表 严格来讲任何一个具有三层路由功能的设备都有路由表 数据通信往往是双向的的,来回都要考虑. 路由是逐跳的,每一跳都要设置. 实际路由是根据已经分配的网络段进行 ...
- Eclipse中对一个项目进行复制粘贴为一个新项目
1:对目标项目执行右键,选择“Copy”,然后在空白处右键,选择“Paste”结果如下图: 2:右键新项目,点击Properties, 3:打开Navigator视图 4:打开.settings文件夹 ...
- C语言做的句柄程序
以vs2015为例---创建对话框程序 一直下一步,下一步,到最后 通过一个小型程序诸如 microsoft spy++我们可以获悉,窗口中失效按钮的句柄为0x00040AE8,由此我们可以给句柄发 ...
- Codeforces Round #568 (Div. 2) D. Extra Element
链接: https://codeforces.com/contest/1185/problem/D 题意: A sequence a1,a2,-,ak is called an arithmetic ...
- 【leetcode】1213.Intersection of Three Sorted Arrays
题目如下: Given three integer arrays arr1, arr2 and arr3 sorted in strictly increasing order, return a s ...
- 【BZOJ3811/UOJ36】 玛里苟斯
Description 魔法之龙玛里苟斯最近在为加基森拍卖师的削弱而感到伤心,于是他想了一道数学题. S 是一个可重集合,S={a1,a2,…,an}. 等概率随机取 S 的一个子集 A={ai1,… ...
- Bootstap
Bootstrap框架 Bootstrap框架 Bootstrap介绍 Bootstrap是Twitter开源的基于HTML.CSS.JavaScript的前端框架. 它是为实现快速开发Web应用程序 ...
- C#中的事件委托
C#中的事件与委托,对于我们写业务代码的程序员来说不常用,这就会导致经常忘记,这边再温习一下. //委托 public delegate void MyEventDelegateHandler(str ...