• Qt笔记——绘图(QBitmap,QPixmap,QImage,QPicture)


    • QPainter绘图
      • 重写绘图事件,虚函数
      • 如果窗口绘图,必须放在绘图事件里实现
      • 绘图事件内部自动调用,窗口需要重绘的时候,状态改变
    • 绘图设备(QPixmap,QImage,QBitmap,QPicture)
      • QPixmap图片背景透明,针对屏幕进行优化了,和平台相关,不能对图片进行修改
      • QImage 和平台无关,可以对图片进行修改,在线程中绘图
      • QPicture 保存绘图 的状态(二进制文件)
      • pixmap.save("../pixmap.png"); 保存图片
      • setWindowFlags(Qt::FramelessWindowHint | windowFlags());去除边框
      • setAttribute(Qt::WA_TranslucentBackground);设置透明

    QPainter

    #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();
    
    protected:
        void paintEvent(QPaintEvent *event);
    
    private slots:
        void on_pushButton_clicked();
    
    private:
        Ui::Widget *ui;
        int x=0;
    };
    
    #endif // WIDGET_H
    

      

    #include "widget.h"
    #include "ui_widget.h"
    #include <QPainter>
    #include <QPen>
    #include <QBrush>
    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    void Widget::paintEvent(QPaintEvent *event)
    {
        //QPainter p(this);
        QPainter p;//创建画家对象
        p.begin(this);//指定当前窗口为绘图设备
        //画背景图
        //p.drawPixmap(0,0, width(), height(), QPixmap("../Image/bk.png"));
        //p.drawPixmap(rect(),QPixmap("../Image/bk.png"));
    
        //定义画笔
        QPen pen;
        pen.setWidth(5);//设置线宽
        pen.setColor(QColor(124,123,0));//rgb
        pen.setStyle(Qt::DashDotDotLine);
    
        QBrush brush;
        brush.setColor(Qt::red);
        brush.setStyle(Qt::Dense1Pattern);
    
        //p.setPen(pen);
        p.setBrush(brush);
        //画直线
        p.drawLine(50,50,150,50);
        p.drawLine(50, 50,50,150 );
    
        //画矩形
        p.drawRect(x,150,100,50);
    
        p.drawEllipse(QPoint(150,150),25,50);
    
        p.drawPixmap(x,180,80,80,QPixmap("../Image/face.png"));
    
        p.end();
    }
    
    void Widget::on_pushButton_clicked()
    {
        x += 20;
        if(x>width())
        {
            x = 0;
        }
        update();
    }
    

     QBitmap

    #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();
    
    protected:
        void paintEvent(QPaintEvent *event);
    
    private:
        Ui::Widget *ui;
    };
    
    #endif // WIDGET_H
    

      

    #include "widget.h"
    #include "ui_widget.h"
    #include <QPainter>
    #include <QBitmap>
    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    void Widget::paintEvent(QPaintEvent *event)
    {
        QPainter p(this);
        //QPixmap图片背景透明
        p.drawPixmap(0,0,QPixmap("../Image/butterfly.png"));
        //QBitmap
        p.drawPixmap(200,0, QBitmap("../Image/butterfly.png"));
        //QPixmap 图片背景白色
        QPixmap pixmap;
        pixmap.load("../Image/butterfly1.png");
    
    }
    

     QPixmap

    #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;
    };
    
    #endif // WIDGET_H
    

      

    #include "widget.h"
    #include "ui_widget.h"
    #include <QPainter>
    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
        QPixmap pixmap(400, 300);
        QPainter p(&pixmap);
        p.fillRect(0,0,400,300,QBrush(Qt::white));
    
        pixmap.fill(Qt::white);
        p.drawPixmap(0,0,80,80,QPixmap("../Image/face.png"));
    
        //保存图片
        pixmap.save("../pixmap.png");
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    

     QImage

    #include "widget.h"
    #include "ui_widget.h"
    #include <QPainter>
    
    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
    
        QImage image(400,300,QImage::Format_ARGB32);
        QPainter p;
        p.begin(&image);
    
        p.drawLine(50,50,100,100);
    
        for(int i=0;i<50;i++)
        {
            for(int j=0;j<50;j++)
            {
                image.setPixel(QPoint(i,j),qRgb(0,255,0));
    
            }
        }
        p.end();
    
        image.save("../image.png");
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    

    QPicture

    #include "widget.h"
    #include "ui_widget.h"
    #include <QPainter>
    #include <QPicture>
    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
        QPicture picture;
        QPainter p;
        p.begin(&picture);
        p.drawLine(50,50,100,100);
        p.end();
    
        picture.save("../picture.png");
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    void Widget::paintEvent(QPaintEvent *event)
    {
    //    QPicture pic;
    //    pic.load("../picture.png");
        QPainter p(this);
    //    p.drawPicture(0,0,pic);
    
        QPixmap pixmap;
        pixmap.load("../Image/face.png");
        QImage tempImage = pixmap.toImage();
        p.drawImage(0,0, tempImage);
    
        QImage image;
        image.load("../Image/face.png");
        QPixmap tempPixmap = QPixmap::fromImage(image);
    }  

    窗口透明

    #include "widget.h"
    #include "ui_widget.h"
    #include <QPainter>
    #include <QMouseEvent>
    #include <QDebug>
    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
        setWindowFlags(Qt::FramelessWindowHint | windowFlags());
    
        setAttribute(Qt::WA_TranslucentBackground);
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    void Widget::paintEvent(QPaintEvent *event)
    {
        QPainter p(this);
        p.drawLine(50,50,100,100);
    }
    
    void Widget::mousePressEvent(QMouseEvent *event)
    {
        if(event->button() == Qt::RightButton)
        {
         close();
         qDebug()<<"close";
        }
        else if(event->button() == Qt::LeftButton)
        {
            p = event->globalPos() - this->frameGeometry().topLeft();
            qDebug()<<"left";
        }
    }
    
    void Widget::mouseMoveEvent(QMouseEvent *event)
    {
        if(event->button() & Qt::LeftButton)
        {
                move(event->globalPos()-p);
        }
    }
    

      

     

     

  • 相关阅读:
    Android开发笔记(十八)——Toast
    20199303 2019-2020-2 《网络攻防实践》综合实践
    20199303 2019-2020-2 《网络攻防实践》第12周作业
    20199303 2019-2020-2 《网络攻防实践》第10周作业
    20199303 2019-2020-2 《网络攻防实践》第8周作业
    20199303 2019-2020-2 《网络攻防实践》第7周作业
    20199303 2019-2020-2 《网络攻防实践》第6周作业
    20199303 2019-2020-2 《网络攻防实践》第5周作业
    20199303 2019-2020-2 实践三网络嗅探与协议分析实践
    Deleting comments in c or java code by awk scripts
  • 原文地址:https://www.cnblogs.com/dalanjing/p/8724876.html
Copyright © 2020-2023  润新知