- 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