关于Qt中的qss样式表需要注意的坑
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Qt中的qss样式表需要注意的坑相关的知识,希望对你有一定的参考价值。
参考技术A 关于QSS要注意的坑。- qss源自css,相当于css的一个子集,主要支持的是css2标准,很多网上的css3的标准的写法在qss这里是不生效的,所以不要大惊小怪。
- qss也不是完全支持所有的css2,比如text-align官方文档就有说明,只支持 QPushButton and QProgressBar,务必看清楚。
- 有时候偷懒直接来一句 *xxx,你会发现大部分是应用了,也有小部分或者极个别没有应用,你可能需要在对应的窗体中 this->setStyleSheet() 来设置。
- qss的执行是有优先级的,如果没有指定父对象,则对所有的应用,比如在窗体widget中 color:#ff0000; 这样会对widget以及widget的所有子对象应用该样式,这种问题各大群每周都有人问,你会发现各种奇奇怪怪的异样不正常,怎么办呢,你需要指定类名或者对象名,比如 #widgetcolor:#ff0000; 这样就只会对widget对象应用该样式,另一种写法 QWidget#widgetcolor:#ff0000;,只想对窗体本身而不是子控件按钮标签等 .QWidgetcolor:#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绘制;
QSS编辑器QssEditor之二:加载有变量的QSS
一.Qt样式表(StyleSheet)
1.关于样式表
Qt样式表可以让你自定义任何一个Qt控件的样式包括颜色、边框、背景等等(你想的到样式都可以),Qt样式表的概念、术语和语法与HTML的CSS样式表类似。样式表是文本规范。
QApplication::setStyleSheet()在整个应用程序上设置,一般在main()函数中:
QFile file(":/qss/test.qss");
file.open(QFile::ReadOnly);
styleSheet = QLatin1String(file.readAll());
qApp->setStyleSheet(styleSheet);
file.close();
一般形式也可以使用QWidget::setStyleSheet()在特定小部件(及其子部件)上设置
QPushButton *button = new QPushButton();
button->setStyleSheet("color: red");
如果在不同级别上设置了多个样式表,Qt将从所有设置的样式表派生有效样式表。这称为级联。
2.样式表语法
样式的规则1:样式规则由选择器和声明组成。选择器指定哪些小部件受规则影响;声明指定应该在小部件上设置哪些属性。
QPushButton color : red
其中QPushButton就是选择器,’ color : red \'是声明部分。 color就是属性,red就是指定给该属性的值。
该语句的意思是QPushButton及其子类的前景色是红色。
样式的规则2:可以为同
以上是关于关于Qt中的qss样式表需要注意的坑的主要内容,如果未能解决你的问题,请参考以下文章