QPainter提供了高性能函数来为大多数的GUI绘图函数使用。它可以画所有的东西,从简单的线条到复杂的形状,它还可以话对齐的文字和图像。通常它在自然坐标系中绘画,但是它也可以改变视角。QPainter可以操作任何继承于QPainterDevice类的对象。
通常QPainter用在一个控件的绘画事件里:构造并且定制绘画者。然后绘画。画完后清除绘画者对象。比如:
void SimpleExampleWidget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setPen(Qt::blue);
painter.setFont(QFont("Arial", 30));
painter.drawText(rect(), Qt::AlignCenter, "Qt");
}
绘画者的核心功能是绘画,但是这个类也提供了一些函数用来允许你定制绘画者的设置和它的渲染质量,还有使能剪切。另外你可以控制许多不同的形状合并到一起,通过指定绘画者的组成模式。
isActive()函数标明绘画者是不是活跃的。一个绘画者被激活通过begin()函数和带有QPaintDevice参数的构造函数。end()函数和析构函数停用这个绘画者。
与QPaintDevice类和QPaintEngine类一起,QPainter来自于Qt的绘画系统的基础。QPainter是用来执行绘画操作的类。QPaintDevice表现了一个可以用QPainter绘画的设备。QPaintEngine提供了绘画者在不同类型设备上绘画的接口。如果绘画者是活跃的,device()返回绘画者所在的绘画设备,paintEngine()返回当前绘画者操作的绘画引擎。更多的信息去参考帮助手册的Paint System。
有时候我们需要在一些非QPaintDevice上进行绘画,QPainter提供了一个静态函数setRedirected()来做这件事情。
警告:当绘画设备是一个控件的时候,QPaint仅能被用在paintEvent()内部,或者由paintEvent()函数调用的函数中。设置Qt::WA_PaintOutsidePaintEvent不起作用。在Mac或者Windows上,你只能在paintEvent()中绘画,不管这个属性如何设置。
这个也是个很复杂的功能,下面的具体介绍太长了,用到的时候再查吧。