用Qt實現2D繪圖

  •  新建Gui應用程序,基類選擇QWidget
  •  widget.h代碼:   
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT
    
public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
    
private:
    Ui::Widget *ui;
protected:
    void paintEvent(QPaintEvent *event);
};

#endif // WIDGET_H linux

  • widget.cpp代碼
#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}
void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(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,50);
    //設置紋理
    brush.setTexture(QPixmap("yafeilinux.png"));
    //從新使用畫刷
    painter.setBrush(brush);
    //定義四個點
    static const QPointF points[4]={
        QPointF(270.0,80.0),
        QPointF(290.0,10),
        QPointF(350.0,30),
        QPointF(390.0,50)


    };
    painter.drawPolygon(points,4);
    painter.fillRect(QRect(10,100,150,20),QBrush(Qt::darkYellow));
    painter.eraseRect(QRect(50,0,50,120));
    //線性漸變
    QLinearGradient linearGradient(QPointF(40,190),QPointF(70,190));

    //插入顏色
    linearGradient.setColorAt(0,Qt::yellow);
    linearGradient.setColorAt(0.5,Qt::red);
    linearGradient.setColorAt(1.0,Qt::green);

    //指定漸變區域之外的區域的擴散方式
    linearGradient.setSpread(QGradient::RepeatSpread);
    //使用漸變做爲畫刷
    painter.setBrush(linearGradient);
    painter.drawRect(10,170,90,40);
    //輻射漸變
    QRadialGradient radialGradient(QPointF(200,190),50,QPointF(275,200));
    radialGradient.setColorAt(0,QColor(255,255,100,150));
    radialGradient.setColorAt(1,QColor(0,0,0,50));
    painter.setBrush(radialGradient);
    painter.drawEllipse(QPointF(200,190),50,50);

    //錐形漸變
    QConicalGradient conicalGradient(QPointF(350,190),60);
    conicalGradient.setColorAt(0.2,Qt::cyan);
    conicalGradient.setColorAt(0.9,Qt::black);
    painter.setBrush(conicalGradient);
    painter.drawEllipse(QPointF(350,190),50,50);
    //畫筆使用線性漸變來繪製直線和文字
    painter.setPen(QPen(linearGradient,2));
    painter.drawLine(0,280,100,280);
    painter.drawText(150,280,tr("helloQt"));
}
Widget::~Widget()
{
    delete ui;
}

  • 運行結果:
相關文章
相關標籤/搜索