使用qt 做界面开发近四年时间了,开发过程中避免不了需要自定义控件和自定义控件样式。下面对使用做一个完整的总结。
一、控件设置样式方法有:
1、通过 qt designer 里直接设置。 如下图。
2、 通过代码动态设置
3、 通过样式表文件设置
优缺点比较:
方法 | 优点 | 缺点 | 加载方式 |
ui 设置 | 设置后立马生效,所见即所得 | 不能根据业务情况动态改变,不能批量实现换肤,修改需要修改ui 文件或代码 | 代码加载 |
代码设置 | 可根据业务动态设置,只要找到对应控件修改比较简单 | 程序运行后才可查看效果,不能立即查看效果,不能批量实现换肤,后期修改需要改动代码 | 代码直接加载 |
样式表文件 | 可通过换样式表文件统一换肤,后期修改不用改动代码。 | 程序运行后才可查看效果,不能立即查看效果,不能根据业务情况动态改变。开发中容易出问题,qss 文件中若无意多打字符都会使样式表中后部分失效。不易排查。项目较大且多人共用时存在互相覆盖或者难维护情况。 | 通过代码读取样式表文件全量加载设置 |
4、设置的范围
可通过类型设置同类控件该属性,也可以通过id 值对指定控件设置。
总结:三种方法各有各自优势,但在实际项目开发中比较倾向于第三种,部分特殊业务需要第二种代码结合使用。 第一种比较常用的是在预研某个功能时比较适合。
二、 样式表的类型总结
首先需要了解下qt css 的盒子结构,这样才更好的设置对应的属性。
一个盒子模型由 content(内容)、border(边框)、padding(间隙)和margin(间隔) 这四个部分组成:
实际开发过程中主要是对字体的基本属性和控件的边框、背景颜色等做自定义设置。
1、CSS文字属性:
color : #999999; /*文字颜色*/
font-family : 宋体,sans-serif; /*文字字体*/
font-size : 9pt; /*文字大小*/
font-style:itelic; /*文字斜体*/
font-variant:small-caps; /*小字体*/
letter-spacing : 1pt; /*字间距离*/
line-height : 200%; /*设置行高*/
font-weight:bold; /*文字粗体*/
vertical-align:sub; /*下标字*/
vertical-align:super; /*上标字*/
text-decoration:line-through; /*加删除线*/
text-decoration: overline; /*加顶线*/
text-decoration:underline; /*加下划线*/
text-decoration:none; /*删除链接下划线*/
text-transform : capitalize; /*首字大写*/
text-transform : uppercase; /*英文大写*/
text-transform : lowercase; /*英文小写*/
text-align:right; /*文字右对齐*/
text-align:left; /*文字左对齐*/
text-align:center; /*文字居中对齐*/
text-align:justify; /*文字分散对齐*/
vertical-align属性
vertical-align:top; /*垂直向上对齐*/
vertical-align:bottom; /*垂直向下对齐*/
vertical-align:middle; /*垂直居中对齐*/
vertical-align:text-top; /*文字垂直向上对齐*/
vertical-align:text-bottom; /*文字垂直向下对齐*/
2、CSS边框空白
padding-top:10px; /*上边框留空白*/
padding-right:10px; /*右边框留空白*/
padding-bottom:10px; /*下边框留空白*/
padding-left:10px; /*左边框留空白
3、CSS符号属性:
list-style-type:none; /*不编号*/
list-style-type:decimal; /*阿拉伯数字*/
list-style-type:lower-roman; /*小写罗马数字*/
list-style-type:upper-roman; /*大写罗马数字*/
list-style-type:lower-alpha; /*小写英文字母*/
list-style-type:upper-alpha; /*大写英文字母*/
list-style-type:disc; /*实心圆形符号*/
list-style-type:circle; /*空心圆形符号*/
list-style-type:square; /*实心方形符号*/
list-style-image:url(/dot.gif); /*图片式符号*/
list-style-position: outside; /*凸排*/
list-style-position:inside; /*缩进*/
4、CSS背景样式:
background-color:#F5E2EC; /*背景颜色*/
background:transparent; /*透视背景*/
background-image : url(/image/bg.gif); /*背景图片*/
background-attachment : fixed; /*浮水印固定背景*/
background-repeat : repeat; /*重复排列-网页默认*/
background-repeat : no-repeat; /*不重复排列*/
background-repeat : repeat-x; /*在x轴重复排列*/
background-repeat : repeat-y; /*在y轴重复排列*/
5、CSS框线一览表:
border-top : 1px solid #6699cc; /*上框线*/
border-bottom : 1px solid #6699cc; /*下框线*/
border-left : 1px solid #6699cc; /*左框线*/
border-right : 1px solid #6699cc; /*右框线*/
以上是建议书写方式,但也可以使用常规的方式 如下:
border-top-color : #369 /*设置上框线top颜色*/
border-top-width :1px /*设置上框线top宽度*/
border-top-style : solid/*设置上框线top样式*/
其他框线样式
solid /*实线框*/
dotted /*虚线框*/
double /*双线框*/
groove /*立体内凸框*/
ridge /*立体浮雕框*/
inset /*凹框*/
outset /*凸框*/
6、伪状态属性
:checked button部件被选中
:disabled 部件被禁用
:enabled 部件被启用
:focus 部件获得焦点
:hover 鼠标位于部件上
:indeterminate checkbox或radiobutton被部分选中
:off 部件可以切换,且处于off状态
:on 部件可以切换,且处于on状态
:pressed 部件被鼠标按下
:unchecked button部件未被选中
7、 combox 等复杂控件内部的子部件属性列表
::down-arrow /*combo box或spin box的下拉箭头*/
::drop-down /*combo box的下拉箭头*/
::indicator /*checkbox、radio button或可选择group box的指示器*/
::item /*menu、menu bar或status bar的子项目*/
::menu-indicator /*push button的菜单指示器*/
::title /*group box的标题*/
::down-button /*spin box的向下按钮*/
::up-arrow /*spin box的向上箭头*/
::up-button /*spin box的向上按钮*/
8、样式表中默认的标准颜色:
17种标准色:aqua, black, blue, fuchsia, gray, green, lime, maroon, navy,olive, orange, purple, red, silver, teal, white, yellow
三、 学习和资料查询地方
1、首先百度或google 搜索是否有所需要的例子。
2、查看 qt 助手里的相关资料和相关例子 或在线查看官网样式表 https://doc.qt.io/qt-5/stylesheet-reference.html
3、日常通过designer 里的ui文件可视化多动手设置和编写代码尝试,最重要的是通过不断学习总结经验。 日常遇到的问题资料不一定能查到或者当时能查到,如果有同事则要多询问相关开发同事是否有类似案例或者经验。没有则多尝试或想其他办法组合达到效果。
参考文章:
https://blog.csdn.net/qq_40602000/article/details/104652131
https://blog.csdn.net/u011471873/article/details/92400144