#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. CSS 三条横线等分

    .header_qian { width: 1.5rem; height: 1.5rem; background: rgba(250, 250, 250,0.7); border-radius: 50 ...

  2. Tableau环图可视化

    1.选择"记录数",拖拽两个记录数放入列中,求总和,选择饼图: 2.选择"大小",调整两个饼图的大小: 3.点击第二个总和(行上的),选择“双轴”: 4.点击坐 ...

  3. 八皇后问题(C#)

    八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同 ...

  4. mysql8.0.主从复制搭建

    搭建主从数据库 一.准备两台以上对的数据库 数据库1(主服务器):192.168.2.2 数据库2(从服务器):192.168.2.4           1.1      配置主服务器 .在 /et ...

  5. Linux环境下将Oracle11g数据库模式由非归档模式(Noarchivelog)修改为自动归档模式(archivelog)

    1.查看Oracle当前版本 select * from v$version 如图所示: 2.切换到Oracle用户 su - oracle 如图所示: 3.进入sqlplus(此时尚未登录oracl ...

  6. 「汇编」加深理解段地址*10H(*16)必须是16的倍数

    王爽的汇编语言,有这样一道题: 检测点2.2 (2)  有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元.则SA应满足的条件是:最小为         , 最大为   ...

  7. 5G来了,中国移动能力开放平台的NFV,支持面向5G的演进,已经具备初期商用条件!

    近日互联网招聘平台发布的<2019春招旺季人才趋势报告>显示,“新新职业”人才受到企业追捧: 5G相关人才需求大幅增长,5G工程师平均招聘月薪达1.39万元,同比增长12.2%.其中,光传 ...

  8. 017_python常用小技巧

    一.进行十六进制运算 print(hex(int("6500000001", 16) - int("640064c6e7",16))) 0xff9b391a

  9. shell脚本解压多个jar包

    for m in "GATEWAY" "ORDER" "PAY"do cd /home/cpay/tomcat${m}/ROOT/WEB-I ...

  10. springboot文件上传下载简单使用

    springboot的文件上传比较简单 一.使用默认的Resolver:StandardServletMultipartResolver controller package com.mydemo.w ...