0:翻译来源:
http://doc.qt.io/qt-5.6/stylesheet.html
翻译起因
:最近做一个项目,后台数据处理部分已经完成,需要定制前端GUI的风格,前两天一直是边写代码,边网上查!比较麻烦的是查到的内容比较零散,于是想从Qt官网看下系统一点的教程,边翻译边学吧!也顺便造福一下网友!
导言
Qt Style Sheets(QSS)是一个强大的工具,它使你可以自己定义部件(widgets)的外观,当然我们也可以通过子类化QStyle实现自定义部件外观的功能。如果你学过HTML编程中的CSS,你就会发现Qt Style Sheets的概念、术语和语法深受 CSS的启发,但是QT把QSS这个强大的工具应用于整个widgets的世界。
内容目录:
1:概览
2:QSS 的语法
3:在Qt Designer中使用QSS
4:使用QSS自定义widgets的外观
5:QSS参考手册
6:QSS的使用例子
1:概览
在代码模式下,QSS的设置可以通过调用QApplication::setStyleSheet() 函数,这个函数的作用范围是整个应用程序,当然我们也可调用QWidget::setStyleSheet()函数,仅仅作用于特定的widget对象。这里就会出现调用多个QSS的情况,Qt会根据就近原则进行样式的匹配,子类自己设置过的样式,就用自己的样式,不会考虑父类是否设置过!只有当子类没有设置过自己的样式时,才会使用父类的样式。学过CSS的同学应该知道我在说什么!
下面是一个小例子:
例子中qss指定了所有QLineEdit类型的对象的背景都会是黄色,所有QCheckBox类型的对象的文字颜色都会是红色。
QLineEdit { background: yellow }
QCheckBox { color: red }
上面这种方式的风格定制要比使用QPalette强大很多。例如,你可以尝试使用QPalette::Button的方法来设置QPushButton的颜色为红色,但是这不能保证没有的情况下都能正常工作,因为在不同的操作系统下,部件的style是被操作系统的主题控制器严格限制的。(说白了QPalette::Button这种方式通用性不好)
有了QSS就好了,使用QPalette来设置style时非常困难或是不可能的事,现在QSS可以轻松搞定了。如果你还在找寻强制设置close buttons或check boxs的背景是黄色,文字是红色的方法,那么QSS就是你要找的答案。
使用了QSS的widget的显示效果非常好,和当前系统的风格也会比较搭(老外好我废话)。任何QSS的设置都会产生效果,不像使用QPalette时,QSS提供的效果是可以得到保证的!(和上面说的一样,建议你使用QSS)。此外Qt Designer中已经集成了设置QSS的方法,这样非常方便设置好效果后马上可以看到widgets的表现。
QSS也可以为你的应用程序提供非常不一样的外观和感受,而不需要使用QStyle的子类。例如,你可以对radio buttons和check boxs使用任意的背景图片,从而让他们看起来更显眼。如果不使用QSS,你就需要子类化一些style 类才能达到效果,例如子类化中需要重写style hint。使用QSS后的效果图如下
当QSS的设置激活后,QStyle返回的是一个经常包装后的QWidget::sytle()函数,该函数中包装了QSS设置的”style sheet”,而不是与具体操作系统有关的style。部件在被绘制时,优先使用QWidget::sytle()函数中包含的sytle,只有该函数中没有设置的style,才会调用底层与平台相关的style。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。