Qt的二维图形引擎是基于QPainter类的。QPainter既可以绘制几何形状(点、线、矩形、椭圆、弧形、弦形、饼状图、多边形和贝塞尔曲线),也可以绘制像素映射、图像和文字。此外,QPainter还支持一些高级特性,例如反走样(针对文字和图形边缘)、像素混合、渐变填充和矢量路径等。QPainter也支持线性变换,例如平移、旋转、错切和缩放。
本例子中利用QPainter类提供的各种draw函数,绘制各种类型的图形,包括对图形的形状、颜色、填充风格等的选择。
1.创建paintarea.h
#ifndef PAINTAREA_H
#define PAINTAREA_H
#include <QtGui>
class PaintArea : public QWidget
{
Q_OBJECT
public:
enum Shape {Line,Rectangle,RoundRect,Ellipse,Polygon,Polyline,Points,Arc,Path,Text,Pixmap};
PaintArea(QWidget *parent = 0);
void setShape(Shape);
void setPen(QPen);
void setBrush(QBrush);
void paintEvent(QPaintEvent *);
private:
Shape shape;
QBrush brush;
QPen pen;
};
#endif // PAINTAREA_H
2.创建paintarea.cpp文件
#include "paintarea.h"
PaintArea::PaintArea(QWidget *parent) : QWidget(parent)
{
shape = Line;
QPalette p = palette();
p.setColor(QPalette::Window,Qt::white);
setPalette(p);
setAutoFillBackground(true);
setMinimumSize(400,400);
}
void PaintArea::setShape(Shape s)
{
shape = s;
update();
}
void PaintArea::setPen(QPen p)
{
pen = p;
update();
}
void PaintArea::setBrush(QBrush b)
{
brush = b;
update();
}
void PaintArea::paintEvent(QPaintEvent *)
{
QPainter p(this);
p.setPen(pen);
p.setBrush(brush);
QRect rect(50,100,300,200);
static const QPoint points[4] = {
QPoint(150,100),
QPoint(300,150),
QPoint(350,250),
QPoint(100,300)
};
int startAngle = 30 * 16;
int spanAngle = 120 * 16;
QPainterPath path;
path.addRect(150,150,100,100);
path.moveTo(100,100);
path.cubicTo(300,100,200,200,300,300);
path.cubicTo(100,300,200,200,100,100);
switch(shape)
{
case Line:
p.drawLine(rect.topLeft(),rect.bottomRight());
break;
case Rectangle:
p.drawRect(rect);
break;
case RoundRect:
p.drawRoundRect(rect);
break;
case Ellipse:
p.drawEllipse(rect);
break;
case Polygon:
p.drawPolygon(points,4);
break;
case Polyline:
p.drawPolyline(points,4);
break;
case Points:
p.drawPoints(points,4);
break;
case Arc:
p.drawArc(rect,startAngle,spanAngle);
break;
case Path:
p.drawPath(path);
break;
case Text:
p.drawText(rect,Qt::AlignCenter,tr("Hello Qt"));
break;
case Pixmap:
p.drawPixmap(150,150,QPixmap(":/images/butterfly.png"));
break;
default:
break;
}
}
3.创建mainwidget.h