• 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 }
  • 相关阅读:
    [转] EJB 3和Spring技术体系比较
    JBOSS只能本机localhost和127.0.0.1能访问的解决
    JBOSS EAP 6.0+ Standalone模式安装成Windows服务
    IBM WebSphere MQ 7.5基本用法
    maven学习(上)- 基本入门用法
    mac下环境变量、maven3.1.1 及 jdk1.7.0.45配置
    java:读/写配置文件
    java:使用匿名类直接new接口
    java与c#的反射性能比较
    XmlSpy / XSD 以及 验证
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/13476036.html
Copyright © 2020-2023  润新知