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

      

     

     

  • 相关阅读:
    端口转发工具ngr0k
    深入理解JavaScript系列(2):揭秘命名函数表达式(转)
    SQL Server DATEDIFF() 函数
    em(倍)与px的区别
    左右页面布局
    深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点(转)
    《JavaScript高级程序设计》(第二版)
    autocomplete 之 ASP.NET
    JQuery 优缺点略谈
    几个常见CSS错误和解决办法
  • 原文地址:https://www.cnblogs.com/dalanjing/p/8724876.html
Copyright © 2020-2023  润新知