[Qt][翻译]Qt Style Sheets内容学习-1

news/2024/7/3 0:14:40 标签: 操作系统, 前端

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。


下接第二部分:”2:QSS 的语法“.......


http://www.niftyadmin.cn/n/1670205.html

相关文章

SQL 优化原则详解

2019独角兽企业重金招聘Python工程师标准>>> 一、问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后…

Java NIO(十一)Non-blocking Server

即使您了解Java NIO非阻塞功能如何工作(选择器,通道,缓冲区等),设计非阻塞服务器仍然很难。与阻塞IO相比,非阻塞IO包含几个挑战。这个无阻塞的服务器教程将讨论非阻塞服务器的主要挑战,并为他们…

何不用python_python – 在django ORM中何时使用或不使用iterator()

这是从django docs on the queryset iterator() method:A QuerySet typically caches its results internally so that repeated evaluationsdo not result in additional queries. In contrast, iterator() will read resultsdirectly, without doing any caching …

2016年4月6日作业 风险管理、项目收尾、知识产权管理

2016年4月6日作业 风险管理、项目收尾、知识产权管理一、风险管理1、风险管理包括哪六个过程?(记)风险管理规划、风险识别、定性风险分析、定量风险分析、应对计划编制、风险监控。2、什么是应急计划?请举例。 应急计划是指当一…

Python中继承的优缺点

导语:本文章记录了本人在学习Python基础之面向对象篇的重点知识及个人心得,打算入门Python的朋友们可以来一起学习并交流。本文重点: 1、不要试图在内置类型的子类中重写方法,可以继承collections的可拓展类寻求变通;2…

foreach mysql 报错_MyBatis操作Oracle批量插入 ORA-00933: SQL 命令未正确结束

最近在使用MyBatis操作Oracle数据库的时候,进行批量插入数据,思路是封装一个List集合通过Myabtis的foreach标签进行循环插入,可是搬照Mysql的批量插入会产生 异常### Error updating database. Cause: java.sql.SQLSyntaxErrorException: OR…

《Windows服务器配置与管理》DNS服务器

工作任务描述公司名称是abc公司,搭建DNS服务器。总公司在北京,总公司的注册的域名为HT.com。你公司下属两个分支,第一个为亚洲公司(Asia),公司总部在北京,第二个为欧洲公司(Europe),请你在总公司上建立一台…

基于Apache CXF的Web Service服务端/客户端

转自:https://www.aliyun.com/zixun/wenji/1263190.html CXF服务端: [java] view plaincopy package com.sean.server; import javax.jws.WebParam; import javax.jws.WebService; WebService public interface Plus { public int add(WebP…