• Qt 绘图


    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

    复制代码
     1 #ifndef WIDGET_H
     2 #define WIDGET_H
     3  
     4 #include <QWidget>
     5  
     6 namespace Ui {
     7 class Widget;
     8 }
     9  
    10 class Widget : public QWidget
    11 {
    12     Q_OBJECT
    13  
    14 public:
    15     explicit Widget(QWidget *parent = 0);
    16     ~Widget();
    17  
    18 protected:
    19     void paintEvent(QPaintEvent *event);
    20  
    21 private slots:
    22     void on_pushButton_clicked();
    23  
    24 private:
    25     Ui::Widget *ui;
    26     int x=0;
    27 };
    28  
    29 #endif // WIDGET_H
    复制代码
    复制代码
     1 #include "widget.h"
     2 #include "ui_widget.h"
     3 #include <QPainter>
     4 #include <QPen>
     5 #include <QBrush>
     6 Widget::Widget(QWidget *parent) :
     7     QWidget(parent),
     8     ui(new Ui::Widget)
     9 {
    10     ui->setupUi(this);
    11 }
    12  
    13 Widget::~Widget()
    14 {
    15     delete ui;
    16 }
    17  
    18 void Widget::paintEvent(QPaintEvent *event)
    19 {
    20     //QPainter p(this);
    21     QPainter p;//创建画家对象
    22     p.begin(this);//指定当前窗口为绘图设备
    23     //画背景图
    24     //p.drawPixmap(0,0, width(), height(), QPixmap("../Image/bk.png"));
    25     //p.drawPixmap(rect(),QPixmap("../Image/bk.png"));
    26  
    27     //定义画笔
    28     QPen pen;
    29     pen.setWidth(5);//设置线宽
    30     pen.setColor(QColor(124,123,0));//rgb
    31     pen.setStyle(Qt::DashDotDotLine);
    32  
    33     QBrush brush;
    34     brush.setColor(Qt::red);
    35     brush.setStyle(Qt::Dense1Pattern);
    36  
    37     //p.setPen(pen);
    38     p.setBrush(brush);
    39     //画直线
    40     p.drawLine(50,50,150,50);
    41     p.drawLine(50, 50,50,150 );
    42  
    43     //画矩形
    44     p.drawRect(x,150,100,50);
    45  
    46     p.drawEllipse(QPoint(150,150),25,50);
    47  
    48     p.drawPixmap(x,180,80,80,QPixmap("../Image/face.png"));
    49  
    50     p.end();
    51 }
    52  
    53 void Widget::on_pushButton_clicked()
    54 {
    55     x += 20;
    56     if(x>width())
    57     {
    58         x = 0;
    59     }
    60     update();
    61 }
    复制代码

    QBitmap

    复制代码
     1 #ifndef WIDGET_H
     2 #define WIDGET_H
     3  
     4 #include <QWidget>
     5  
     6 namespace Ui {
     7 class Widget;
     8 }
     9  
    10 class Widget : public QWidget
    11 {
    12     Q_OBJECT
    13  
    14 public:
    15     explicit Widget(QWidget *parent = 0);
    16     ~Widget();
    17  
    18 protected:
    19     void paintEvent(QPaintEvent *event);
    20  
    21 private:
    22     Ui::Widget *ui;
    23 };
    24  
    25 #endif // WIDGET_H
    复制代码
    复制代码
     1 #include "widget.h"
     2 #include "ui_widget.h"
     3 #include <QPainter>
     4 #include <QBitmap>
     5 Widget::Widget(QWidget *parent) :
     6     QWidget(parent),
     7     ui(new Ui::Widget)
     8 {
     9     ui->setupUi(this);
    10 }
    11  
    12 Widget::~Widget()
    13 {
    14     delete ui;
    15 }
    16  
    17 void Widget::paintEvent(QPaintEvent *event)
    18 {
    19     QPainter p(this);
    20     //QPixmap图片背景透明
    21     p.drawPixmap(0,0,QPixmap("../Image/butterfly.png"));
    22     //QBitmap
    23     p.drawPixmap(200,0, QBitmap("../Image/butterfly.png"));
    24     //QPixmap 图片背景白色
    25     QPixmap pixmap;
    26     pixmap.load("../Image/butterfly1.png");
    27 }
    复制代码

    QPixmap

    复制代码
     1 #ifndef WIDGET_H
     2 #define WIDGET_H
     3  
     4 #include <QWidget>
     5  
     6 namespace Ui {
     7 class Widget;
     8 }
     9  
    10 class Widget : public QWidget
    11 {
    12     Q_OBJECT
    13  
    14 public:
    15     explicit Widget(QWidget *parent = 0);
    16     ~Widget();
    17  
    18 private:
    19     Ui::Widget *ui;
    20 };
    21  
    22 #endif // WIDGET_H
    复制代码
    复制代码
     1 #include "widget.h"
     2 #include "ui_widget.h"
     3 #include <QPainter>
     4 Widget::Widget(QWidget *parent) :
     5     QWidget(parent),
     6     ui(new Ui::Widget)
     7 {
     8     ui->setupUi(this);
     9     QPixmap pixmap(400, 300);
    10     QPainter p(&pixmap);
    11     p.fillRect(0,0,400,300,QBrush(Qt::white));
    12  
    13     pixmap.fill(Qt::white);
    14     p.drawPixmap(0,0,80,80,QPixmap("../Image/face.png"));
    15  
    16     //保存图片
    17     pixmap.save("../pixmap.png");
    18 }
    19  
    20 Widget::~Widget()
    21 {
    22     delete ui;
    23 }
    复制代码

    QImage

    复制代码
     1 #include "widget.h"
     2 #include "ui_widget.h"
     3 #include <QPainter>
     4  
     5 Widget::Widget(QWidget *parent) :
     6     QWidget(parent),
     7     ui(new Ui::Widget)
     8 {
     9     ui->setupUi(this);
    10  
    11     QImage image(400,300,QImage::Format_ARGB32);
    12     QPainter p;
    13     p.begin(&image);
    14  
    15     p.drawLine(50,50,100,100);
    16  
    17     for(int i=0;i<50;i++)
    18     {
    19         for(int j=0;j<50;j++)
    20         {
    21             image.setPixel(QPoint(i,j),qRgb(0,255,0));
    22  
    23         }
    24     }
    25     p.end();
    26  
    27     image.save("../image.png");
    28 }
    29  
    30 Widget::~Widget()
    31 {
    32     delete ui;
    33 }
    复制代码

    QPicture

    复制代码
     1 #include "widget.h"
     2 #include "ui_widget.h"
     3 #include <QPainter>
     4 #include <QPicture>
     5 Widget::Widget(QWidget *parent) :
     6     QWidget(parent),
     7     ui(new Ui::Widget)
     8 {
     9     ui->setupUi(this);
    10     QPicture picture;
    11     QPainter p;
    12     p.begin(&picture);
    13     p.drawLine(50,50,100,100);
    14     p.end();
    15  
    16     picture.save("../picture.png");
    17 }
    18  
    19 Widget::~Widget()
    20 {
    21     delete ui;
    22 }
    23  
    24 void Widget::paintEvent(QPaintEvent *event)
    25 {
    26 //    QPicture pic;
    27 //    pic.load("../picture.png");
    28     QPainter p(this);
    29 //    p.drawPicture(0,0,pic);
    30  
    31     QPixmap pixmap;
    32     pixmap.load("../Image/face.png");
    33     QImage tempImage = pixmap.toImage();
    34     p.drawImage(0,0, tempImage);
    35  
    36     QImage image;
    37     image.load("../Image/face.png");
    38     QPixmap tempPixmap = QPixmap::fromImage(image);
    39 }  
    复制代码

    窗口透明

    复制代码
     1 #include "widget.h"
     2 #include "ui_widget.h"
     3 #include <QPainter>
     4 #include <QMouseEvent>
     5 #include <QDebug>
     6 Widget::Widget(QWidget *parent) :
     7     QWidget(parent),
     8     ui(new Ui::Widget)
     9 {
    10     ui->setupUi(this);
    11     setWindowFlags(Qt::FramelessWindowHint | windowFlags());
    12  
    13     setAttribute(Qt::WA_TranslucentBackground);
    14 }
    15  
    16 Widget::~Widget()
    17 {
    18     delete ui;
    19 }
    20  
    21 void Widget::paintEvent(QPaintEvent *event)
    22 {
    23     QPainter p(this);
    24     p.drawLine(50,50,100,100);
    25 }
    26  
    27 void Widget::mousePressEvent(QMouseEvent *event)
    28 {
    29     if(event->button() == Qt::RightButton)
    30     {
    31      close();
    32      qDebug()<<"close";
    33     }
    34     else if(event->button() == Qt::LeftButton)
    35     {
    36         p = event->globalPos() - this->frameGeometry().topLeft();
    37         qDebug()<<"left";
    38     }
    39 }
    40  
    41 void Widget::mouseMoveEvent(QMouseEvent *event)
    42 {
    43     if(event->button() & Qt::LeftButton)
    44     {
    45             move(event->globalPos()-p);
    46     }
    47 }

    原文链接:https://www.cnblogs.com/ybqjymy/p/13476036.html
  • 相关阅读:
    一个理科直男如何看《鱿鱼游戏》
    这个开源组织里的项目都是精品(第二弹)
    Python_关于python2的encode(编码)和decode(解码)的使用
    Python学习笔记
    解决E: Could not get lock /var/lib/dpkg/lock
    Ubuntu系统python3版本设置问题
    xshell连接虚拟机linux系统失败问题
    linux菜鸟笔记
    Python小白学习之基础知识(个人笔记)
    Python小白学习之如何添加类属性和类方法,修改类私有属性
  • 原文地址:https://www.cnblogs.com/xiaohai123/p/13563884.html
Copyright © 2020-2023  润新知