用Qt实现2D绘图

来源:互联网 发布:win7仿mac任务栏 编辑:程序博客网 时间:2024/06/16 08:14

  •  新建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

  • 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; 


  • 运行结果:
 



FROM: http://my.oschina.net/u/574191/blog/127610
0 0
原创粉丝点击