`
qimo601
  • 浏览: 3449042 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

QT样式表(QStyleSheet)

    博客分类:
  • Qt
阅读更多

QT样式表 (QStyleSheet)

作者:刘旭晖 Raymond 转载请注明出处
Email:colorant@163.com
BLOG:http://blog.csdn.net/colorant/

 

除了子类化Style类,使用QT样式表(QStyleSheet)是另一种快速改变QT程序UI风格的方法,它很大程度上借鉴和参考了HTML层叠样式表的语法和思想。其效果叠加在Style的基础上

 

按官方文档的说法,QT样式表目前只能和内置Style配合工作,和子类化的Style的配合正在开发中

StyleSheet的使用

StyleSheet文件的默认后缀名为qss,可以通过命令行参数 -stylesheet filename.qss 来设置样式表,也可以通过QApplication::setStyleSheet 或 QWidget::setStyleSheet来设置应用程序或特定控件要使用的样式表

 

::setStyleSheet函数的参数是字符串(不是qss文件的名字,而是样式表的内容),所以直接使用的话,不方便一次设置大量的规则,但是可以使用资源文件将qss样式表嵌入到程序中,然后通过QApplication::setStyleSheet来使用,例如:

 

 

  1. QFile file(":/qss/mystylesheet.qss");  
  2. file.open(QFile::ReadOnly);  
  3. app.setStyleSheet(file.readAll());  

 

 

样式表语法

 

这里不打算详细解释,只是举例说明,具体的语法规则,请参考 http://qt.nokia.com/doc/4.6/stylesheet-syntax.html

一条样式表的描述规则可能类似这样:

 

  1. QComboBox#myComboBox::down-arrow:pressed {  
  2.     positionrelative;  
  3.     top: 1px; left: 1px;  
  4. }  

 

 

一条样式表规则由选择器 (Selector)和属性定义(declaration)组成。

 

 

  1. QComboBox#myComboBox::down-arrow:pressed  

 

 

这部分是选择器,用于指定样式表规则的应用对象,细分开来:

  • QComboBox#myComboBox 这一部分叫类型选择器(Type Selector),QComboBox指定了对象类名,#name指定对象的实例名(非必须)其它的选择器语法请参考官方文档。
  • down-arrow 子控件描述符(subcontrol),和前面的字段用::隔开,这里表示组合框的下拉按键
  • pressed 伪状态(Pseudo-States)描述符,和前面的字段用:隔开,这里表示压下状态

以上除了第一个字段,都不是必须,而是进一步限制规则适用范围

 

 

  1. {  
  2.     positionrelative;  
  3.     top: 1px; left: 1px;  
  4. }  

 

 

这部分是属性定义,由成对的属性名:属性值组成,用;分隔。

 

样式表规则的范围和优先级关系

 

因为样式表规则的层级关系比较复杂,另外设置的方式也有很多,有时候会发生多条规则都和某一个具体控件相关的情况,这样具体哪一条样式表规则最终被应用到控件的UI表现上,就需要有一个规则来定义,大致上牵涉到这个问题的情况有如下几种

 

规则冲突

 

多条规则制定了不同的内容,可能的情况有很多,比如

 

QPushButton:hover { color: white }
QPushButton { color: red }

这种情况,其实可以不算冲突,更加具体的类型描述符定义的规则拥有更高优先级,所以一个有鼠标悬停的按钮的文本颜色就是白色的,否则为红色

 

QPushButton:hover { color: white }
QPushButton:enabled { color: red }

这里就可能发生规则冲突,当一个使能的按钮有鼠标悬停的时候,颜色的定义是什么呢? QStyleSheet的判断原则是,后面规则的优先级高于前面的规则,所以这种情况颜色为红色

 

 

QPushButton { color: red }
QAbstractButton { color: gray }

 

这个相对难发现,一个基类及其子类都定义了针对文本颜色的规则,那么子类应用哪一条规则呢?你可能会认为自然是子类用自己的规则了,很可惜不是,样式表不考虑类的继承层级优先关系,所以还是后一条规则优先级高于前一条规则。如果确实要单独设定子类的规则,需要交换规则的顺序。

 

样式表层叠 Cascading

 

因为样式表可以应用在QApplication上,也可以单独应用在控件上,所以最终应用到一个具体控件的样式表,是通过叠加合并所有的父控件乃至应用程序的样式表设定来得到的。这种情况下,也有可能发生规则冲突, 例如:

 

 

  1. qApp->setStyleSheet("QPushButton { color: white }");  
  2. myPushButton->setStyleSheet("* { color: blue }");  

 

 

这种情况下,控件自身的样式表的优先级高于父控件或应用程序的样式表

 

样式表继承 Inheritance

 

在标准的CSS样式表中,一个控件的字体和颜色属性如果没有明确设定,那么将自动继承自父控件,而在QT的样式表中,不会自动继承,例如:

 


qApp->setStyleSheet("QGroupBox { color: red; } ");

这种情况下,对于GroupBox中的添加的子控件,不会自动设置其颜色属性,如果要设置子控件的属性,需要明确设定:


qApp->setStyleSheet("QGroupBox, QGroupBox * { color: red; }");

注意,这里的继承和上面的层叠不一样,层叠指不同样式表设置同一个对象,继承指的则是样式表规则中选择器对控件层级关系的影响

 

Stylesheet是如何附加在Style上的

当设置StyleSheet的时候,一个QStyleSheetStyle会被生成并被设为应用程序实际的Style,而当前的Style则被reparent成QStyleSheetStyle的子对象,当应用程序或控件调用Style绘图的时候,实际调用的是QStyleSheetStyle对象,在QStyleSheetStyle类内部,会先调用函数按照StyleSheet定义的规则绘制UI,如果没有相关规则,再调用当前的Style对象的绘图函数绘制UI,所以QStyleSheet作为一个代理Style先对UI进行处理。

分享到:
评论

相关推荐

    QT样式表 (QStyleSheet)

    QT样式表 (QStyleSheet) QT样式表(QStyleSheet)是一种快速改变QT程序UI风格的方法,它借鉴和参考了HTML层叠样式表的语法和思想。QT样式表可以通过命令行参数-stylesheet filename.qss来设置,也可以通过...

    Qt样式表,很全的样式表资源,网上大神整理的。

    Qt 样式表详解 Qt 样式表是 Qt 应用程序开发框架中的一个重要组件,用于指定窗口部件的样式和布局。 Qt 样式表的设计 受到了 CSS 的启发,通过调用 QWidget::setStyleSheet() 或 QApplication::setStyleSheet(),...

    QT样式表45套,带Demo及样式表,一键切换

    QT样式表是QT框架中一个强大的特性,它允许开发者通过CSS样式语法来定制GUI界面的外观和感觉。这个资源包包含45套不同的QT样式表,每一套都是为提升应用程序的视觉吸引力和用户体验设计的。这些样式表可以用于QT5和...

    Qt样式表实例

    Qt样式表实例 在 Qt 中,样式表实例是一个功能强大且灵活的工具,允许开发者自定义 Qt 小部件的外观和行为。本文将详细介绍 Qt 样式表实例,并探讨如何使用样式表来自定义 Qt 小部件。 一、可 stylable 小部件 Qt...

    Qt样式表实时编辑工具2套.rar

    Qt样式表实时编辑工具是Qt开发中的利器,主要用于可视化地设计和编辑Qt应用程序的界面样式。这两套工具,QSSEditor和RizekQSSEditor,都为开发者提供了方便快捷的方式来定制Qt控件的外观,使得应用界面更具个性化和...

    Qt样式表使用大全(中文整理资料)

    Qt样式表(QSS)是一种类似于HTML和CSS的样式表技术,它用于美化Qt应用程序的用户界面。QSS允许开发者对控件进行样式和视觉效果的定制,使得程序界面不仅功能强大,还能有良好的用户体验。 在深入理解QSS的使用之前...

    qt样式表一键生成(花狗Fdog)

    QT样式表一键生成,避免了无穷无尽的百度搜索,一来方便学习,所以参数都写在左下角,方便了解到使用了什么生成了什么,二来不用重复造轮子,调节后,可直接将左下角生成的QSS代码复制到qt的样式表里面即可显示效果...

    QT精美样式表,超级好看

    本资源聚焦于QT中的一个重要特性——样式表(QSS,Qt Style Sheets),这是一种类似于CSS的样式语言,用于定制QT界面的外观和感觉。 QSS允许开发者通过简单的文本文件定义控件的样式,包括颜色、字体、边框、阴影、...

    Qt样式表使用说明.rar_QT_QT 样式_Qt样式表_样式表 qt

    Qt样式表(QSS,Qt Style Sheets)是Qt框架中用于控制GUI元素外观的一个强大工具,类似于网页设计中的CSS。它允许开发者通过简单的文本文件或程序代码来定义Qt应用程序的界面样式,包括颜色、字体、边框、背景、布局...

    qt样式表.详细教程.zip

    Qt样式表是Qt框架中一个强大的特性,它允许开发者通过CSS样式语法来定制Qt界面的外观和感觉。这个“qt样式表.详细教程.zip”压缩包包含了一个详细的Qt样式表教程,很可能是一本电子书“qt样式表.pdf”,旨在帮助用户...

    qt样式表武林秘籍.pdf

    本文档是一本关于Qt样式表的系统性介绍,旨在帮助读者学会如何使用Qt样式表为应用程序设计漂亮的界面。Qt样式表在很多方面与CSS有相似之处,因此,如果读者已经熟悉CSS,将更容易掌握Qt样式表的应用。 在文档的开始...

    Qt样式表学习之路.zip

    Qt样式表是Qt框架中一个强大的特性,它允许开发者使用类似CSS(层叠样式表)的语言来设计和定制Qt应用程序的用户界面。这种技术极大地提高了UI的灵活性和可维护性,使得无需深入到C++代码中去修改界面的每一个细节。...

    Qt样式表武林秘籍.zip

    《Qt样式表武林秘籍》是一本专注于Qt样式表技术的深入指南,旨在帮助开发者们掌握这一强大的界面设计工具,从而提升应用的视觉效果和用户体验。Qt样式表(QSS)是Qt框架中的一个核心特性,它允许我们使用类似CSS的...

    Qt样式表葵花宝典.zip

    《Qt样式表葵花宝典》是一份详尽的指南,专为想要深入理解并熟练应用Qt样式表的开发者设计。这份宝典以其全面性、易用性和实用性赢得了高度赞誉,其中包含了各种Qt样式表的使用技巧和实例,旨在帮助读者轻松掌握这一...

    QSS.rar_QSS样式表_QT QSS_QT 样式_Qt样式表_qss

    在"QSS.rar"这个压缩包中,包含了多个预设的QSS样式表,例如`office2010.qss`, `default.qss`, `levelfour.qss`, `darkorange.qss`, `noskin.qss`和`darkorange.stylesheet`,这些文件可以被Qt应用程序加载使用,...

    qt样式表.doc

    ### Qt样式表详解 #### 一、何为Qt样式表 Qt样式表是Qt框架提供的一种强大工具,用于自定义用户界面元素的外观。它的灵感来源于网页开发中的CSS(层叠样式表),允许开发者通过简单的样式规则来改变控件的视觉效果...

    Qt样式表武林秘籍.pdf

    《Qt样式表武林秘籍》是一本专注于QT5框架中QSS(Qt StyleSheet)技术的详细指南。QSS是Qt提供的一种强大的界面样式设计语言,它借鉴了HTML/CSS的语法,使得Qt应用程序的界面设计变得更为灵活和直观。通过学习这本书...

    QT样式表QT样式表QT样式表QT样式表

    QT样式表

Global site tag (gtag.js) - Google Analytics