- qss源自css,相当于css的一个子集,主要支持的是css2标准,很多网上的css3的标准的写法在qss这里是不生效的,所以不要大惊小怪。
- qss也不是完全支持所有的css2,比如text-align官方文档就有说明,只支持 QPushButton and QProgressBar,务必看清楚。
- 有时候偷懒直接来一句 *{xxx},你会发现大部分是应用了,也有小部分或者极个别没有应用,你可能需要在对应的窗体中 this->setStyleSheet() 来设置。
- qss的执行是有优先级的,如果没有指定父对象,则对所有的应用,比如在窗体widget中 {color:#ff0000} 这样会对widget以及widget的所有子对象应用该样式,这种问题各大群每周都有人问,你会发现各种奇奇怪怪的异样不正常,怎么办呢,你需要指定类名或者对象名,比如 #widget{color:#ff0000} 这样就只会对widget对象应用该样式,另一种写法 QWidget#widget{color:#ff0000},只想对窗体本身而不是子控件按钮标签等 .QWidget{color:#ff0000} ,具体详细规则参见官方说明。
- qss整体来说还是可以的,解析速度性能在Qt5高版本后期比Qt4好很多,尤其是修复了不少qss中的解析绘制BUG。尽管有这样那样的BUG,怀着包容的心对待它。
- qss官方学习地址1:[http://47.100.39.100/qtwidgets/stylesheet-reference.html](http://47.100.39.100/qtwidgets/stylesheet-reference.html)
- qss官方学习地址2:[http://47.100.39.100/qtwidgets/stylesheet-examples.html](http://47.100.39.100/qtwidgets/stylesheet-examples.html)
Qt样式表有多种运行机制,主要是考虑到各种需求场景,继承自QWidget的类和qApp类都支持setStyleSheet方法,还可以统一将样式表放在文件,或者将样式文件加入到资源文件。
- 斗气:qss内容写得到处都是,哪里需要就写在哪里,各种控件调用 setStyleSheet方法传入样式表内容,或者直接对应控件鼠标右键弹出菜单选择改变样式表填入内容;
- 斗者:qss内容放在文件,读取文件内容设置样式表,程序发布的时候带上qss文件;
- 斗师:qss文件作为资源文件放到qrc文件,直接编译到可执行文件中,防止篡改;
- 斗灵:在qss文件中自定义一些标志充当变量使用,读取以后替换对应的变量为颜色值,类似动态换肤;
- 斗王:放在文件容易被篡改,集成到可执行文件不够灵活,一旦样式表更新需要重新编译文件,如何做到既能只更新样式表文件,又不需要重新编译可执行文件,又能防止被篡改:采用rcc命令将资源文件编译生成二进制,只需要替换该二进制文件即可;
- 斗皇:继承qstyle类自己实现完成所有样式接口,统一整体风格,大名鼎鼎的UOS系统默认规则就是如此,不允许用样式表,全部painter绘制;
1、 元素类型的转换(display属性)
Display属性
属性值:
Block
Inline
None
大部分块状元素默认的display的值为block,其中li默认的值 list-item(列表元素)
大部分内联元素默认的display值为inline,其中input默认的值为:inline-block(行内块元素);
内联元素里面特殊的一个:行内块元素(内联块元素)
特点:
1:可以设置宽高
2:在一行内逐个显示
3:当前元素的display的值为inline-block能支持vertical-align 属性。
2、 vertical-align属性
vertical-align:垂直对齐。
Top
Bottom
Middle
Baseline
让一个元素在父元素里面左右上下居中:
给父元素添加text-align:center(左右居中)
给当前元素添加:
Display:inline-bolck
Vertical-align:middle
在当前元素后面(不要回车),添加一个空的span标签。
给span设置样式:
Display:inline-block
Width:0
Height:100%
Vertical-align:middle
3、 css元素类型的分类总结
分类:块状元素、内联元素、可变元素
元素类型的转换:
Display属性:
属性值:
Block
Inline
Inline-book
None
List-item
行内块元素:input display为inline-blcok1Img标签:浏览器默认解析的display值为inline
标签的嵌套规则:
尽量让块状元素作为父元素存在;
内联元素的子元素尽量也是内联元素;
P标签中不能出现h1-h6;
P标签和h1-h6不能互相嵌套。
4、 图片默认的display属性值为inline,为什么图片能添加宽高???
从另一个角度对所有的标签进行分类。
分为:置换元素与非置换元素
置换元素:
典型的置换元素:img/input 依赖标签的属性或者元素自身的类型;‘
因为img是置换元素,所以能添加大小。因为置换元素在页面显示的过程中,生成一个框(框架),这个框能添加大小。
非置换元素:
不是置换元素的都是非置换元素。
5、 定位
定位:让元素的位置发生改变。
定位属性:
Position属性:设置或者检索元素定位方式。
(如果元素有了position属性,元素就知道自己要做位置移动了)
Position的属性值:(属性值是告诉元素参照物是谁)
制定坐标:left/right/top/bottom
Position的属性值:
1:position:static 【静态定位】 (position的默认值)
2:position:absolute 【绝对定位】
a. 绝对定位的参照物:
已经有定位的父元素为参照物
如果父元素都没有定位或者没有父元素,以文档为参照物
b. 绝对定位的特点:
不占据空间,脱离布局流。