关于Qt中的qss样式表需要注意的坑

html-css010

关于Qt中的qss样式表需要注意的坑,第1张

关于QSS要注意的坑。

- 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绘制;

自控能力和自主意识强的话,自学的时候肯定可以全身心的投入。当然在学习理论知识外做一些简单的应用,如果是软件专业的话可以参加html5培训,培训18周时间就应该有了些经验,这时候出去找一份工作从实习生开始就可以了。 入门: 能用html css实现任何网站的静态布局。 这个难度不大,能做到就能达到切图仔的水平 可以干活: 能用js写基本动态效果, 绑定事件, 用原生或jq操作dom。 勉强合格: 以上两项达到熟练, 并可以用js写较复杂的交互。 到这里就可以找到前端的工作并干活了。。 合格: 知道如何实现js的继承,能说出一个new的过程, 会合理用闭包, 会用promise, amd cmd模块化, 会用underscore,能写正则。 会其中两到三项。 到这里应该可以找到缺人并还算不错的互联网公司前端工作 还行: 能手写js的原型链继承, 知道一个promise的实现机制, 能写出underscore中大部分函数, 手写delegate, 随便找个库基本能看明白是干嘛。 到这里应该可以冲bat了吧。 不错: 对页面性能的优化有研究, mvc框架能够分析出个优缺点所以然来, 对打包发布工具有研究。 到这份上能算靠谱的前端了吧 牛人: 根据业务需要写所需的打包发布模块化工具, 有能力自己写框架, 对开发流程和方式有自己的见解, 不依赖类库, 项目需要啥就随手写一个模块, 造过轮子无数。 到这份上国内前端工作可以任挑了吧。

/* *QWidget* */

QWidget {

    border: 1px solid #FF0000    /*边框*/

    border-radius: 5px           /*圆角*/

    background-color: red        /*背景色*/

}