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

 QBitmap

1#ifndef WIDGET_H 2#define WIDGET_H 3 4#include <QWidget> 5 6namespace Ui { 7class Widget; 8} 9 10class Widget : public QWidget 11{ 12 Q_OBJECT 13 14public: 15 explicit Widget(QWidget *parent = 0); 16 ~Widget(); 17 18protected: 19 void paintEvent(QPaintEvent *event); 20 21private: 22 Ui::Widget *ui; 23}; 24 25#endif // WIDGET_H 26 27#include "widget.h" 28#include "ui_widget.h" 29#include <QPainter> 30#include <QBitmap> 31Widget::Widget(QWidget *parent) : 32 QWidget(parent), 33 ui(new Ui::Widget) 34{ 35 ui->setupUi(this); 36} 37 38Widget::~Widget() 39{ 40 delete ui; 41} 42 43void Widget::paintEvent(QPaintEvent *event) 44{ 45 QPainter p(this); 46 //QPixmap图片背景透明 47 p.drawPixmap(0,0,QPixmap("../Image/butterfly.png")); 48 //QBitmap 49 p.drawPixmap(200,0, QBitmap("../Image/butterfly.png")); 50 //QPixmap 图片背景白色 51 QPixmap pixmap; 52 pixmap.load("../Image/butterfly1.png"); 53 54}

 QPixmap

1#ifndef WIDGET_H 2#define WIDGET_H 3 4#include <QWidget> 5 6namespace Ui { 7class Widget; 8} 9 10class Widget : public QWidget 11{ 12 Q_OBJECT 13 14public: 15 explicit Widget(QWidget *parent = 0); 16 ~Widget(); 17 18private: 19 Ui::Widget *ui; 20}; 21 22#endif // WIDGET_H 23 24#include "widget.h" 25#include "ui_widget.h" 26#include <QPainter> 27Widget::Widget(QWidget *parent) : 28 QWidget(parent), 29 ui(new Ui::Widget) 30{ 31 ui->setupUi(this); 32 QPixmap pixmap(400, 300); 33 QPainter p(&pixmap); 34 p.fillRect(0,0,400,300,QBrush(Qt::white)); 35 36 pixmap.fill(Qt::white); 37 p.drawPixmap(0,0,80,80,QPixmap("../Image/face.png")); 38 39 //保存图片 40 pixmap.save("../pixmap.png"); 41} 42 43Widget::~Widget() 44{ 45 delete ui; 46}

 QImage

1#include "widget.h" 2#include "ui_widget.h" 3#include <QPainter> 4 5Widget::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 30Widget::~Widget() 31{ 32 delete ui; 33}

QPicture

1#include "widget.h" 2#include "ui_widget.h" 3#include <QPainter> 4#include <QPicture> 5Widget::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 19Widget::~Widget() 20{ 21 delete ui; 22} 23 24void 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> 6Widget::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 16Widget::~Widget() 17{ 18 delete ui; 19} 20 21void Widget::paintEvent(QPaintEvent *event) 22{ 23 QPainter p(this); 24 p.drawLine(50,50,100,100); 25} 26 27void 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 41void Widget::mouseMoveEvent(QMouseEvent *event) 42{ 43 if(event->button() & Qt::LeftButton) 44 { 45 move(event->globalPos()-p); 46 } 47}
点赞
收藏

评论区

加载中...

相关推荐

Sketch 95.3(矢量绘图UI设计软件)

SketchMac版是一款非常优秀的矢量绘图工具,拥有简约的设计,调色板,面板,菜单,窗口,控件和功能强大的矢量绘图和文字工具;包含针对UI设计的操作和交互模式,让你设计图标、移动手机UI、网站UI等更加简单高效。此版本包括一些错误修复和调整!1、数字设计

Sketch for mac(矢量绘图UI设计软件)

SketchMac版以简约的设计是基于无限的规模和层次的绘图空间,拥有调色板,面板,菜单,窗口和控件。虽然使用简单,它提供了功能强大的矢量绘图和文字工具。如完美的布尔运算,符号,和强大的标尺,参考线和网格。出自:Sketch拥有很棒的矢量工具以及基本的形状

python数据分析与可视化——利用Seaborn进行绘图

利用Seaborn进行绘图下面例子中所用数据下载地址——Matplotlib绘图基本模仿MATLAB绘图库,其绘图风格和MATLAB类似。由于MATLAB绘图风格偏古典,因此,Python开源社区开发了Seabo

HTML5中Canvas元素的使用总结

HTML5中Canvas元素的使用总结  Canvas提供了开发者自定义绘图的接口,我们可以公国getContext()函数来获取绘图上下文进行绘制操作,这个函数中可以传入两个参数,其中第1个参数设置绘图上下文的类型,比较常用的是"2d",我们也可以使用"webgl"来使用webOpenGL实现3D绘制。本篇博

Quartz2D绘图

绘图路径A.简单说明在画线的时候,方法的内部默认创建一个path。它把路径都放到了path里面去。1.创建路径 cgmutablepathref调用该方法相当于创建了一个路径,这个路径用来保存绘图信息。2.把绘图信息添加到路径里边。以前的方法是点的位置添加到ctx(图形上下文信息)中,ctx默认会在内部创建一个pat

Sketch for Mac 97.2中文版

是一款适用于UI/UX设计、网页设计、图标制作等领域的矢量绘图软件,其主要特点如下:1.简单易用的界面设计:Sketch的用户界面简洁明了,使得用户可以轻松上手操作,不需要复杂的学习过程。2.强大的矢量绘图功能:Sketch提供了丰富的矢量绘图工具和特性,