參考文獻:《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)