Qt 样式表¶
如何使用样式表来自定义小部件的外观。
Qt样式表是一种强大的机制,允许您自定义小部件的外观,除了通过子类化QStyle已经可以实现的功能之外。Qt样式表的概念、术语和语法深受HTML层叠样式表(CSS)的启发,但适用于小部件的世界。
主题:
Qt样式表示例
注意
如果在同一个部件上使用Qt样式表和设置部件外观的函数,例如setFont()或setBackground(),如果设置冲突,样式表将优先。
概述¶
样式表是文本规范,可以使用setStyleSheet()在整个应用程序上设置,或者使用setStyleSheet()在特定的小部件(及其子部件)上设置。如果在不同级别设置了多个样式表,Qt会从所有设置的样式表中派生出有效的样式表。这被称为级联。
例如,以下样式表指定所有QLineEdit应使用黄色作为背景颜色,所有QCheckBox应使用红色作为文本颜色:
QLineEdit { background: yellow } QCheckBox { color: red }
对于这种定制,样式表比QPalette更强大。例如,可能会想将QPalette::Button角色设置为红色,以获得一个红色的QPushButton。然而,这并不能保证在所有样式中都有效,因为样式作者受到不同平台指南的限制,并且在Windows和macOS上还受到原生主题引擎的限制。
样式表允许您执行各种自定义操作,这些操作仅使用QPalette难以或无法实现。如果您希望必填字段具有黄色背景,潜在破坏性按钮具有红色文本,或者花哨的复选框,样式表就是答案。
样式表应用于当前的widget style之上,这意味着您的应用程序将尽可能看起来像原生应用程序,但任何样式表的约束都将被考虑。与调色板调整不同,样式表提供了保证:如果您将QPushButton的背景颜色设置为红色,您可以确保在所有样式、所有平台上,按钮的背景颜色都是红色。此外,Qt Widgets Designer 提供了样式表集成,使得在不同widget styles中查看样式表的效果变得容易。
此外,样式表可用于为您的应用程序提供独特的外观和感觉,而无需子类化 QStyle。例如,您可以为单选按钮和复选框指定任意图像,使它们脱颖而出。使用这种技术,您还可以实现通常需要子类化多个样式类的微小定制,例如指定 style hint。
当样式表处于活动状态时,由style()返回的QStyle是一个包装“样式表”样式,不是特定于平台的样式。包装样式确保任何活动的样式表得到尊重,并将绘图操作转发给底层的、特定于平台的样式(例如,Windows上的QWindowsVistaStyle)。
自 Qt 4.5 起,Qt 样式表完全支持 macOS。