样式

Qt 的内置小部件使用 QStyle 类来执行几乎所有的绘制操作。QStyle 是一个抽象基类,它封装了 GUI 的外观和感觉,可以用来使小部件看起来与等效的原生小部件完全相同,或者为小部件提供自定义外观。

Qt 提供了一组 QStyle 子类,这些子类模拟了 Qt 支持的不同平台的原生外观(QWindowsStyle、QMacStyle 等)。这些样式内置在 Qt GUI 模块中,其他样式可以通过 Qt 的插件机制提供。

大多数用于绘制样式元素的函数接受四个参数:

  • 一个枚举值,指定要绘制的图形元素

  • 一个 QStyleOption 对象,指定如何以及在哪里渲染该元素

  • 一个应该用于绘制元素的QPainter对象

  • 一个 QWidget 对象,用于在其上进行绘制(可选)

样式从QStyleOption类中获取渲染图形元素所需的所有信息。小部件作为最后一个参数传递,以防样式需要它来执行特殊效果(例如macOS上的动画默认按钮),但这不是强制性的。实际上,QStyle可以用于在任何绘图设备上绘制(不仅仅是小部件),在这种情况下,小部件参数是一个零指针。

../_images/paintsystem-stylepainter.png

绘图系统还提供了继承自QPainter的QStylePainter类。QStylePainter是一个方便类,用于在小部件内绘制QStyle元素,并通过一组在QStyle的API之上实现的高级绘图函数扩展了QPainter。使用QStylePainter的优势在于参数列表显著缩短。

paintsystem-icon1

QIcon

QIcon 类提供了不同模式和状态下的可缩放图标。

QIcon 可以生成反映图标状态、模式和尺寸的像素图。这些像素图是从提供给图标的像素图集中生成的,并被 Qt 小部件用来显示代表特定操作的图标。

QIcon 对象的渲染由 QIconEngine 类处理。每个图标都有一个对应的图标引擎,负责以请求的尺寸、模式和状态绘制图标。

有关小部件样式和外观的更多信息,请参阅样式和样式感知小部件