QPainter
paintEvent
是Qt中一个非常重要的函数,它是QWidget
类的一个事件处理函数,用于处理小部件的绘制事件。当Qt认为小部件需要重绘时(例如,窗口首次出现时,大小改变时,或者调用了小部件的update()
方法时),paintEvent
就会被自动调用。
使用paintEvent
的基本步骤
-
重写
paintEvent
函数:要在你的小部件上进行自定义绘图,你需要在你的小部件类中重写paintEvent
函数。 -
创建
QPainter
对象:QPainter
是Qt中用于所有绘图操作的类。在paintEvent
中,你需要创建一个QPainter
对象,并将其与要绘制的小部件(通常是this
指针)关联起来。 -
使用
QPainter
进行绘图:QPainter
提供了一系列方法来绘制形状(如线条、矩形、圆形等)、文本和图像。你可以在paintEvent
函数中使用这些方法来实现你的绘图逻辑。 -
结束绘图:当你完成绘图后,
QPainter
对象会在离开作用域时自动销毁,此时所有的绘图操作都会被提交到屏幕上。
画矩形
QRectF
是Qt框架中的一个类,用于表示矩形的位置和大小。与QRect
相比,QRectF
使用浮点数来表示坐标和尺寸,这允许进行更精确的图形绘制和布局计算。QRectF
主要用于图形和界面元素的布局管理,以及在绘图操作中指定元素的位置和大小
画圆弧
drawArc
函数是QPainter
类的一个成员函数,用于在图形界面上绘制一个弧线。弧线是从椭圆中截取的一部分,定义了起始角度和跨越的角度范围。此函数非常适用于绘制圆形的一部分、圆环或者任何需要弧形的场景。
画椭圆
画多边形
QPolygon
是Qt框架中的一个类,用于表示一个多边形。这个类提供了一系列的方法来操作多边形的顶点,使得它非常适合用于图形绘制和界面设计中处理多边形形状。QPolygon
基本上是一个包含QPoint
对象的列表,每个QPoint
代表多边形的一个顶点。QPolygon
提供了各种方法来添加、移除或修改其顶点,以及进行其他操作如多边形的平移和缩放。
画路径
FillRule
是Qt中用来决定如何填充(绘制内部)一个图形(特别是复杂图形和路径)的规则。在Qt中,FillRule
主要应用于QPainterPath
类,它定义了填充路径时如何判断路径内部和外部的规则,从而影响图形的填充效果。FillRule
对于处理自相交的路径或者多个子路径组合成的复杂图形尤其重要。
Qt提供了两种FillRule
:
Qt::WindingFill(默认)
- 非零环绕规则:这个规则通过计算一个点到图形各边缘的线段的环绕数来决定该点是否在图形内部。简单来说,对于任意给定的点,从该点出发画一条射线,然后检查这条射线与路径的交点,根据交点处路径的方向增加或减少环绕数。如果最终环绕数非零,则认为该点在路径内部,应被填充。这个规则能够正确处理大多数自相交的图形。
Qt::OddEvenFill
- 奇偶规则:对于给定的点,同样从该点出发画一条任意射线,计算射线与路径的交点数。如果这个数是奇数,点被认为是在图形内部;如果是偶数,认为是在外部。这个规则对于某些特定的图形布局更加直观,特别是当路径自相交时。
QPainterPath path;
path.setFillRule(Qt::OddEvenFill);