参考文献:《Qt Creator 快速入门》第三版 霍亚飞编著
Qt中和绘图相关的三个类是QPainter、QPainterDevice和QPaintEngine。QPainter可以在继承自QpainterDevice类的任何对象上进行绘制操作。
QPainter一般在一个部件绘制重绘事件Paint Event的处理函数paintEvent()函数中进行绘制。首先创建QPainter对象,然后进行图像绘制,最后销毁QPainter对象。
另外还有几个类经常用到。QPen类,为QPainter提供画笔来绘制线条和形状的轮廓。QBrush类提供了画刷来对图图形进行填充。
新建基于Qt Widgets的应用,基类选择QWifget。在widget.h中声明重绘事件处理函数
protected:
void paintEvent(QPaintEvent *event)
在widget.cpp中实现重写绘图函数,使用上面提到的几个类进行基本图形绘制 ,代码如下
void Widget::paintEvent(QPaintEvent *event)
{
//创建painter
QPainter painter;
//call begin,指定this为绘图设备
painter.begin(this);
//画线(没有指定画笔,就使用默认画笔)
painter.drawLine(QPoint(0,0),QPoint(100,100));
//创建画笔
QPen pen(Qt::green,5,Qt::DotLine,Qt::RoundCap,Qt::RoundJoin);
//使用画笔
painter.setPen(pen);
QRectF rectangle(70.0,40.0,80.0,60.0);
int startAngle=30*16;
int spanAngle=120*16;
//绘制圆弧
painter.drawArc(rectangle,startAngle,spanAngle);
//重新设置画笔
pen.setWidth(1);
pen.setStyle(Qt::SolidLine);
painter.setPen(pen);
//绘制一个矩形
painter.drawRect(160,20,50,40);
//创建画刷
QBrush brush(QColor(0,0,255),Qt::Dense4Pattern);
//使用画刷
painter.setBrush(brush);
//绘制椭圆
painter.drawEllipse(220,20,50,80);
//设置纹理
brush.setTexture(QPixmap("../mydrawing/texture.png"));
//重新使用画刷
painter.setBrush(brush);
//定义4个点
static const QPointF points[4]=
{
QPointF(270.0,80.0),
QPointF(290.0,10.0),
QPointF(350.0,30.0),
QPointF(290.0,70.0)
};
//绘制多边形
painter.drawPolygon(points,4);
painter.end();
}
效果如下
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxCMNpXT0kEVPhXU6hFMG1mYw50MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL4EjMxUTM1ETMzIDOwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)