#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#include <QFont> Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
x = ;
ui->setupUi(this); connect(ui->move, &QPushButton::clicked, this, [=]()
{
// 刷新窗口
update(); // 系统调用paintEvent 函数
});
} Widget::~Widget()
{
delete ui;
} void Widget::paintEvent(QPaintEvent *)
{
// 创建画家类对象
QPainter p(this); // 指定绘图设备 #if 0
// 创建新画笔 -- 轮廓
QPen pen;
pen.setColor(/*Qt::green*/QColor(, , ));
pen.setWidth(); // 像素
pen.setStyle(Qt::DotLine); // 闭合区域使用画刷
QBrush brush(QPixmap(":/Image/face.png"));
p.setBrush(brush); // 将新画笔设置给画家类
p.setPen(pen);
// 画背景图
p.drawPixmap(, , QPixmap(":/Image/xks.png")); // 画直线
p.drawLine(QPoint(, ), QPoint(, )); // 画椭圆
p.drawEllipse(QPoint(, ), , ); // 画矩形
p.drawRect(, , , ); // 写字
QFont font("华文彩云", , , true);
p.setFont(font);
p.drawText(, , "我是中国人, 我爱我的祖国!!!"); int width = this->width();
int heght = this->height();
#endif
// 提供笑脸
x += ;
if(x > this->width())
{
x = ;
}
p.drawPixmap(x, , QPixmap(":/Image/sunny.png")); }
#ifndef WIDGET_H
#define WIDGET_H #include <QWidget> namespace Ui {
class Widget;
} class Widget : public QWidget
{
Q_OBJECT public:
explicit Widget(QWidget *parent = );
~Widget(); protected:
/*
* 1. 回调函数
* 2. 此函数不需要用户与调用, 再刷新的时候会自定调用
* 1. 窗口显示的时候
* 2. 最大化, 最小化
* 3. 窗口被这遮挡, 重新显示的时候
* 4. 用户强制刷新的时候
* 5. ...........
* 3. 如果想使用画家类在窗口中画图, 操作必须在paintEvent函数中完成
*/
void paintEvent(QPaintEvent *); private:
Ui::Widget *ui;
int x;
}; #endif // WIDGET_H

QPixmap,QImage,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); // 在QPixmap中画图
QPixmap pix(, ); // 纸的大小
pix.fill(Qt::red);
QPainter p(&pix);
p.setPen(QPen(Qt::green, ));
p.drawRect(, , , );
p.drawEllipse(, , , );
pix.save("D:\\mypixmap.png"); // 指定绘图设备 1. 构造函数中(参数是绘图设备)
// 2. begin(参数是绘图设备)
// end();
// 在QImage中画图
QImage img(, , QImage::Format_RGB32); // 纸的大小
img.fill(Qt::red);
p.begin(&img);
p.setPen(QPen(Qt::green, ));
p.drawRect(, , , );
p.drawEllipse(, , , );
p.end();
img.save("D:\\myImage.png"); // 在QPicture中画图
// 1. 保存的是绘图步骤 -- 画家类
// 2. 不是图片, 二进制文件(save保存生成的文件)
// 3. 不依赖平台
QPicture pic; // 纸的大小
p.begin(&pic);
p.setPen(QPen(Qt::green, ));
p.drawRect(, , , );
p.drawEllipse(, , , );
p.end();
pic.save("D:\\mypic.aaa");
} // QWidget
// QPixmap QImage QPicture QBitmap(黑白图片)
// QBitmap 父类 QPixmap
// QPixmap -- 图片类, 主要用来显示, 它针对于显示器显示做了特殊优化, 依赖于平台的, 只能在主线程中使用(UI线程)
// QIamge -- 图片类 , 不依赖有平台, (图片传输 , 可以在多线程中对其进行操作)
Widget::~Widget()
{
delete ui;
} void Widget::paintEvent(QPaintEvent *)
{
QPainter p(this);
QPicture pic;
pic.load("D:\\mypic.png");
p.drawPicture(, , pic);
}
QPixmap:
p.load("路径");———加载图片
p.drawPixmap(b);
a.专门为图像在屏幕上的显示做了优化,依赖于平台
b.主要应用于平台上的图形显示,在不同的平台上拥有相同是显示效果
QBitmap b;--
p.drawPixmap(b)
是QPixmap的一个子类,只显示黑白色
QImage
a.使用独立于硬件的绘制系统,专门为图像的像素级访问做了优化
b.可以在多线程中使用
c.可以修改图片中的任意一个像素值
QPicture -- 二进制文件
a.记录和重现QPainter 的各种命令
b.与平台无关 QPixmap 和 QImage 的直接相互转换
.QPixmap-->QImage:QPixmap::toImage()
.QImage-->QPixmap:QPixmap::fromImage() [static]

(十一)QPainter绘图, QPixmap,QImage,QPicture,QBitmap的更多相关文章

  1. Qt笔记——绘图(QBitmap,QPixmap,QImage,QPicture)

    QPainter绘图 重写绘图事件,虚函数 如果窗口绘图,必须放在绘图事件里实现 绘图事件内部自动调用,窗口需要重绘的时候,状态改变 绘图设备(QPixmap,QImage,QBitmap,QPict ...

  2. Qt 绘图(QBitmap,QPixmap,QImage,QPicture)

    QPainter绘图绘图设备(QPixmap,QImage,QBitmap,QPicture) 重写绘图事件,虚函数 如果窗口绘图,必须放在绘图事件里实现 绘图事件内部自动调用,窗口需要重绘的时候,状 ...

  3. [Qt2D绘图]-05绘图设备-QPixmap&&QBitmap&&QImage&&QPicture

    这篇笔记记录的是QPainterDevice(绘图设备,可以理解为一个画板) 大纲:     绘图设备相关的类:QPixmap QBitmap QImage QPicture     QPixmap ...

  4. QPixmap QImage 相互转化

    QPainter p(this); QPixmap pixmap; pixmap.load("E:\\参考文件\\image\\1.jpg"); //QPixmap->QIm ...

  5. QPixmap,QImage图片大小缩放linux版

    注意事项: 1.装载图片的地址有时候会读取不到.可以多摸索一下当前系统对应的格式. 2.scaled缩放方式选择 3.注意保存路径.下面程序保存路径是当前执行文件目录中. PicOpera::PicO ...

  6. Qt QPixmap QImage 图片等比例缩放到指定大小

    QPixmap pixmap(path); //pixmap=QPixmap::fromImage(imgShow); pixmap = pixmap.scaled(, , Qt::KeepAspec ...

  7. Qt开发中的实用笔记一--xml,Qpainter,Delegate:

    因为开发环境不能联网,开发中用到有用的知识就记在word稳定中,不知不觉就记载了几十页,为避免笔记丢失,现在就一点点忘博客上搬,方便日后回顾! ---------------------------- ...

  8. qt之图像处理

    毕业2年了,一直使用的qt做桌面程序,很少接触图像算法类的东西,最近由于项目的原因,不得不了解下图像处理,不过也是一些简单的图像处理,仅此作为记录,并希望能帮助初学qt图像处理的朋友. 首先我推荐一篇 ...

  9. Imagelab-0-QT label显示 opencv 图像

    Imagelab-0-QT label显示 opencv 图像 opencvc++qtimagelab 开始之前 这其实也是opencv 处理图像的系列, 只是想我们在进一步复杂化我们的代码之前, 每 ...

随机推荐

  1. Java内存区域和内存溢出异常

    前言 对于java程序员来说,在虚拟机自动内存管理的机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出的问题,由虚拟机管理内存,这一切看起来都很 ...

  2. 原生js实例对象方法

    Array中的方法 ☞ toString() // 把数组转换为字符串,使用逗号分隔☞ valueOf() // 返回数组对象本身 ☞ 栈方法(先进后出)ary.push() // 该方法有一个返回值 ...

  3. 关于javascript异步

    1.简单的理解 JavaScript是单线程的!总所周知,正常代码是从上而下,一条一条顺序执行的.就好比下楼梯,第一条代码先获得内存或者先执行操作.当遇到漫长的处理操作时(比如读取庞大的文件时,执行大 ...

  4. Vue与React两个框架的区别对比

    简单介绍 React--Facebook创建的JavaScript UI框架.它支撑着包括Instagram在内的大多数Facebook网站.React与当时流行的jQuery,Backbone.js ...

  5. Java:配置环境(Mac)——Tomcat

    1.官网下载 2.把下载的文档解压,放到合适的路径下. 3.打开eclipse 4.在Apache文件夹下选择Tomcat的对应版本 5.选择刚才下载的文件 6.可以右键Start了

  6. JS中 confirm() 方法

    前言 环境: window 10,google 浏览器 测试代码 <html> <!-- 测试确定框,如果点 "是" ,则返回 true,这样就触发 a 标签的 ...

  7. HP LasterJet 3050驱动安装技巧,面向win7,8,8.1,10

    最近上咸鱼淘二手打印机,看中了这款打印机,HP官网一查发现还是有新驱动的,比较激动就下单买了,200元自提也不贵,打印效果勉强凑合,打印图片有不太明显的白线,不知是何原因····· 买来插上电脑,自动 ...

  8. bilibili用户信息全栈爬取

  9. 【Linux基础】Linux命令date 日期时间

    1.显示到纳秒 date +%F.%H:%M:%S.%N --:38.740127086 date +%Y-%m-%d.%H:%M:%S.%N2019-04-25.00:28:24.060756673 ...

  10. vue源码分析—Vue.js 源码构建

    Vue.js 源码是基于 Rollup 构建的,它的构建相关配置都在 scripts 目录下.(Rollup 中文网和英文网) 构建脚本 通常一个基于 NPM 托管的项目都会有一个 package.j ...