QStyle Functions 样式函数(五)

QStyle类定义了三个用于绘制基本元素,控件和复杂元素的函数:drawPrimitive(),drawControl()和drawComplexControl()。

这些函数采用以下参数:

要绘制的元素的枚举值
一个QStyleOption,其中包含绘制元素所需的信息。
一个QPainter用来绘制元素。
指向QWidget的指针,通常是绘制元素的控件。


并非所有的小部件都向自己发送指针。如果发送给函数的样式选项不包含您所需的信息,则应检查小部件实现以查看它是否向自身发送了指针。

QStyle类还提供了在绘制元素时使用的辅助函数。

drawItemText()函数在指定的矩形内绘制文本,并以QPalette作为参数。 drawItemPixmap()函数有助于在指定的边界矩形内对齐像素图。

其他QStyle函数会对绘制的函数进行各种计算。这些小部件还使用这些函数来计算大小提示,并且如果它们自己绘制了几个样式元素,则还用于边界矩形计算。

与绘制元素的函数一样,辅助函数通常采用相同的参数。

subElementRect()函数采用SubElement枚举值,并计算子元素的边界矩形。样式使用此功能来知道在何处绘制元素的不同部分。这主要是为了重用。如果创建新样式,则可以使用与超类相同的子元素位置。

subControlRect()函数用于计算复杂控件中子控件的边界矩形。实现新样式时,您将重新实现subControlRect()并计算与超类不同的矩形。

pixelMetric()函数返回一个像素度量,它是屏幕像素中与样式相关的大小。它采用PixelMetric枚举的值并返回正确的度量。请注意,像素指标不一定必须是静态指标,但可以使用例如style选项进行计算。

hitTestComplexControl()函数返回在复杂控件中鼠标指针悬停的子控件。通常,这仅是使用subControlRect()获取子控件的边界矩形,然后查看哪个矩形包含光标位置的问题。

QStyle还具有函数Polish()和Unpolish()。所有小部件在显示之前先发送到polish()函数,并在隐藏时发送给unpolish()。

您可以使用这些功能在小部件上设置属性,或执行样式所需的其他工作。例如,如果您需要知道鼠标何时悬停在小部件上,则需要设置WA_Hover小部件属性。然后,将在小部件的样式选项中设置State_MouseOver状态标志。

QStyle具有一些静态助手功能,可以执行一些常见和困难的任务。他们可以根据滑块的值计算滑块手柄的位置,并变换矩形并考虑反向布局来绘制文本。有关更多详细信息,请参见QStyle类文档。

重新实现QStyle虚拟函数的通常方法是对不同于超类的元素进行处理。对于所有其他元素,您可以简单地使用超类实现。

posted @ 2020-11-03 21:51  流浪侠客  阅读(596)  评论(0编辑  收藏  举报