(十一)QPainter绘图, QPixmap,QImage,QPicture,QBitmap


#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的更多相关文章
- Qt笔记——绘图(QBitmap,QPixmap,QImage,QPicture)
QPainter绘图 重写绘图事件,虚函数 如果窗口绘图,必须放在绘图事件里实现 绘图事件内部自动调用,窗口需要重绘的时候,状态改变 绘图设备(QPixmap,QImage,QBitmap,QPict ...
- Qt 绘图(QBitmap,QPixmap,QImage,QPicture)
QPainter绘图绘图设备(QPixmap,QImage,QBitmap,QPicture) 重写绘图事件,虚函数 如果窗口绘图,必须放在绘图事件里实现 绘图事件内部自动调用,窗口需要重绘的时候,状 ...
- [Qt2D绘图]-05绘图设备-QPixmap&&QBitmap&&QImage&&QPicture
这篇笔记记录的是QPainterDevice(绘图设备,可以理解为一个画板) 大纲: 绘图设备相关的类:QPixmap QBitmap QImage QPicture QPixmap ...
- QPixmap QImage 相互转化
QPainter p(this); QPixmap pixmap; pixmap.load("E:\\参考文件\\image\\1.jpg"); //QPixmap->QIm ...
- QPixmap,QImage图片大小缩放linux版
注意事项: 1.装载图片的地址有时候会读取不到.可以多摸索一下当前系统对应的格式. 2.scaled缩放方式选择 3.注意保存路径.下面程序保存路径是当前执行文件目录中. PicOpera::PicO ...
- Qt QPixmap QImage 图片等比例缩放到指定大小
QPixmap pixmap(path); //pixmap=QPixmap::fromImage(imgShow); pixmap = pixmap.scaled(, , Qt::KeepAspec ...
- Qt开发中的实用笔记一--xml,Qpainter,Delegate:
因为开发环境不能联网,开发中用到有用的知识就记在word稳定中,不知不觉就记载了几十页,为避免笔记丢失,现在就一点点忘博客上搬,方便日后回顾! ---------------------------- ...
- qt之图像处理
毕业2年了,一直使用的qt做桌面程序,很少接触图像算法类的东西,最近由于项目的原因,不得不了解下图像处理,不过也是一些简单的图像处理,仅此作为记录,并希望能帮助初学qt图像处理的朋友. 首先我推荐一篇 ...
- Imagelab-0-QT label显示 opencv 图像
Imagelab-0-QT label显示 opencv 图像 opencvc++qtimagelab 开始之前 这其实也是opencv 处理图像的系列, 只是想我们在进一步复杂化我们的代码之前, 每 ...
随机推荐
- CSS3制作上下跳动动画箭头效果
动画效果如下: 代码如下: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8&q ...
- 《全栈营销之如何制作个人博客》之一:用什么开发语言和CMS系统
现在的互联网,已经不再是初级互联时代,是需要全方位营销,自建粉丝池的时代,云码素材从提出全栈营销,到实践分析,总结出全栈营销第一步,先制作一个个人博客是最好的开始.今天开始就跟我一起学习如何制作一个精 ...
- css选择器概述
css选择器种类 id选择器 类选择器.属性选择器.伪类选择器 元素选择器.伪元素选择器 通配符选择器.子类选择器.后代选择器.相邻兄弟选择器.选择器分组 一.id选择器 <p id=" ...
- Android Studio打包SDK后,为什么没有bundles文件夹?
在Android Studio中,将项目打包成jar包,按照网上说的方法打包完成后,在intermediates文件夹下没有bundles,AS版本3.1.2,后来发现,原来是intermediate ...
- Java数据解析之XML
文章大纲 一.XML解析介绍二.Java中XML解析介绍三.XML解析实战四.项目源码下载 一.XML解析介绍 最基础的XML解析方式有DOM和SAX,DOM和SAX是与平台无关的官方解析方式 ...
- SQL Server 事务日志文件已满,收缩日志文件(9002)
错误如下图: 1.数据库 → 属性 → 选项 → 恢复模式 → 选择‘简单’:如下图: 2.任务 → 收缩 → 文件类型‘文件’ → 收缩模式‘在释放未使用的空间前重新组织页’,将文件收缩到K,大小填 ...
- IIS发布的网站,内网和外网不能访问的解决办法
A.关闭防火墙.控制面板-Windows防火墙-打开或关闭Windows防火墙(不推荐) B.打开:控制面板-Windows防火墙-高级设置-入站规则,在入站规则窗口中找到”BranchCache内容 ...
- Linux 下查看字体
1.查看所有字体 命令:fc-list 2.查看中文字体 命令:fc-list :lang=zh 3.查看更多字体 命令:fc-match -v "AR PL UKai CN"
- ssrfme 复现
这道题搞了我很长时间,主要太菜了,开始复现吧 <?php $sandbox = "sandbox/" . md5("orange" . $_SER ...
- jeecg字典表—报表配置(popup弹框)
新建字典表 录入字典数据 新建报表配置 新建用于popup的表 字典Code中对应,用户接受popup返回的字段(按顺序写) 结果校验