样式与支持样式的控件
样式(继承自 `QStyle` 的类)负责代小部件进行绘制,并封装了图形用户界面的外观和风格。QStyle 是一个抽象基类。Qt 的内置小部件几乎都使用它进行绘制,因此它们的外观与相应的原生小部件完全一致。
Qt 提供了一系列内置样式。windows 和fusion 样式属于Qt Widgets 模块。平台样式(例如 Windows 上的windows11 和 macOS 上的macos )是仅在各自平台上可用的插件。QStyleFactory 列出了运行时可用的样式,并可根据名称创建它们。QApplication::setStyle() 将某个样式设为应用程序样式,用户可以通过-style 命令行选项选择样式。
QStyle 的实现是赋予生产应用程序独特外观的方式。StyleKit提供了一个实现,即QStyleKitStyle ,它读取 QML 格式的设计描述。关于何时使用样式、StyleKit 或样式表,请参阅《Qt Widgets 的样式设计方法》。
自定义样式
若要修改现有样式的特定方面,请继承QProxyStyle ,并重写用于绘制或测量您想要修改的元素的虚拟函数。代理样式会封装另一个样式,并将您未重写的部分全部转发给该样式。
您可以显式指定基样式,也可以不指定。显式指定基样式可让您完全掌控,适合依赖特定样式行为的自定义操作。如果不指定基样式,代理样式将包裹应用程序样式,因此您的自定义操作将应用于平台提供的样式之上。
The QStyle class documentation 展示了一个用于替换旋转框箭头的代理样式。
实现样式
QCommonStyle 为完整的样式实现提供了便捷的基础。它实现了所有 Qt 样式共有的行为,例如子元素的布局和尺寸计算,并将绘制任务交由您处理。 继承 `QCommonStyle ` 并重写绘制函数,同时设置与通用默认值不同的像素度量、子元素矩形以及样式提示。Qt 的内置样式不属于公共 API 的一部分,不能用作基类;请改用 `QProxyStyle ` 来封装它们。
实现完整的样式是一项复杂的任务。以下页面描述了样式 API 的工作原理,追溯了小部件从 paint 事件到样式绘制的过程,并列出了每个小部件使用的元素、状态和选项:
- 《样式如何绘制小部件》解释了样式元素、子元素、像素度量、样式提示、样式选项、QStyle 函数以及配色方案。
- 《编写支持样式的控件》展示了自定义控件如何通过当前样式进行绘制,从而确保其在任何样式下都能正确显示。
- 《为复选框设置样式:分步指南》追踪了一个QCheckBox 从其paint事件开始,经过QCommonStyle ,最终生成一个自定义指示器的过程。
- 《控件样式参考》针对每个控件,列出了其绘制的样式元素、设置的状态标志以及样式选项的成员。
控件渲染的元素在所有样式中都是一致的,因此当您编写支持样式识别的控件或委托时,也可以参考此文档。
用于小部件样式设置的类
使用这些类来定制应用程序的外观。
基于 RGB、HSV 或 CMYK 值的颜色 | |
色彩空间抽象 | |
颜色空间之间的转换 | |
封装了GUI的通用外观和风格 | |
具有任意形状的鼠标光标 | |
指定用于绘制文本的字体的查询 | |
关于底层窗口系统中可用字体的信息 | |
关于字体的通用信息 | |
表示 QGraphicsAnchorLayout 中两个项目之间的锚点 | |
可在 Graphics View 中将小部件锚定在一起的布局 | |
包含每个小部件状态的颜色组 | |
封装GUI外观和风格的抽象基类 | |
用于创建 QStyle 对象 | |
返回基本数据类型以外内容的样式提示 | |
返回 QRegion 的样式提示 | |
返回 QVariant 的样式提示 | |
将 Qt Labs StyleKit 样式应用于Qt Widgets | |
存储 QStyle 函数使用的参数 | |
用于在小部件内绘制 QStyle 元素的便捷类 |
另请参阅 QStyle 、QProxyStyle 、QCommonStyle 、QStylePainter 、QStyleOption 以及《Qt Widgets 的样式设计方法》。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.