天天看點

我的QT Creator學習筆記(二十二)——繪制基本圖形和填充

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

}
           

效果如下

我的QT Creator學習筆記(二十二)——繪制基本圖形和填充

繼續閱讀