本页内容

样式与支持样式的控件

样式(继承自 `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 事件到样式绘制的过程,并列出了每个小部件使用的元素、状态和选项:

控件渲染的元素在所有样式中都是一致的,因此当您编写支持样式识别的控件或委托时,也可以参考此文档。

用于小部件样式设置的类

使用这些类来定制应用程序的外观。

QColor

基于 RGB、HSV 或 CMYK 值的颜色

QColorSpace

色彩空间抽象

QColorTransform

颜色空间之间的转换

QCommonStyle

封装了GUI的通用外观和风格

QCursor

具有任意形状的鼠标光标

QFont

指定用于绘制文本的字体的查询

QFontDatabase

关于底层窗口系统中可用字体的信息

QFontInfo

关于字体的通用信息

QGraphicsAnchor

表示 QGraphicsAnchorLayout 中两个项目之间的锚点

QGraphicsAnchorLayout

可在 Graphics View 中将小部件锚定在一起的布局

QPalette

包含每个小部件状态的颜色组

QStyle

封装GUI外观和风格的抽象基类

QStyleFactory

用于创建 QStyle 对象

QStyleHintReturn

返回基本数据类型以外内容的样式提示

QStyleHintReturnMask

返回 QRegion 的样式提示

QStyleHintReturnVariant

返回 QVariant 的样式提示

QStyleKitStyle

将 Qt Labs StyleKit 样式应用于Qt Widgets

QStyleOption

存储 QStyle 函数使用的参数

QStylePainter

用于在小部件内绘制 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.