Qt-绘图设备
1 简介
参考视频:https://www.bilibili.com/video/BV1XW411x7NU?p=40
Qt绘图设备有三种:QPixmap、QBitmap、QImage、QPicture。
QPixmap:专门针对屏幕进行优化了,和平台相关,不能对图片进行修改。
QBitmap:QPixmap的一个子类,它的色深限定为1(表示颜色的二进制位数),提供单色图像,只有黑白两色的图像数据。
QImage:和平台无关,可以对图片进行修改,可在线程中绘图。
QPicture:保存绘图的状态为二进制文件。
2 测试
(1)QPixmap和QBitmap的比较
说明:使用两张背景色分别为透明和白色的图片,分别用QPixmap和QBitmap进行绘制,进行对比分析。
原始图片:第一张背景为透明,第二张背景为白色。

测试代码:
1 void Widget::paintEvent(QPaintEvent *event)
2 {
3 QPainter p(this);
4
5 //QPixmap 图片背景透明
6 p.drawPixmap(0, 0, QPixmap(":/new/prefix1/image/butterfly.png"));
7 //QBitmap 图片背景透明
8 p.drawPixmap(200, 0, QBitmap(":/new/prefix1/image/butterfly.png"));
9
10 //QPixmap 图片背景白色
11 QPixmap pixmap;
12 pixmap.load(":/new/prefix1/image/butterfly1.png");
13 p.drawPixmap(0, 200, pixmap);
14 //QBitmap 图片背景白色
15 QBitmap bitmap;
16 bitmap.load(":/new/prefix1/image/butterfly1.png");
17 p.drawPixmap(200, 200, bitmap);
18 }
运行结果:

可以看出,使用QBitmap绘制,白色的背景在QBitmap中消失了,而透明色在QBitmap中转换成了黑色;其他颜色则是使用点的疏密程度来体现的。
(2)QPixmap绘制图片
说明:在400x300的窗口中将背景色设置为白色,并加载一个图片,然后保存。
测试代码:
1 Widget::Widget(QWidget *parent) :
2 QWidget(parent),
3 ui(new Ui::Widget)
4 {
5 ui->setupUi(this);
6
7 //绘图设备: 400x300
8 QPixmap pixmap(400, 300);
9 QPainter p(&pixmap);
10 //填充背景
11 p.fillRect(0, 0, 400, 300, QBrush(Qt::white));
12 //pixmap.fill(Qt::white);
13 p.drawPixmap(0, 0, 80, 80, QPixmap("../image/face.png"));
14 //保存图片
15 pixmap.save("../pixmap.png");
16 }
运行测试:

(3) QImage绘制图片
说明:使用QImage绘制图片,并改变50x50的像素点的颜色,然后保存图片。
测试代码:
1 Widget::Widget(QWidget *parent) :
2 QWidget(parent),
3 ui(new Ui::Widget)
4 {
5 ui->setupUi(this);
6
7 //创建一个绘图设备,背景是透明色
8 QImage image(400, 300, QImage::Format_ARGB32);
9 QPainter p;
10 p.begin(&image);
11 //绘图
12 p.drawImage(0, 0, QImage("../image/face.png"));
13 //对绘图设备前50个像素点进行操作
14 for (int i=0; i < 50; i++) {
15 for (int j=0; j < 50; j++) {
16 image.setPixel(QPoint(i, j), qRgb(0, 255, 0));
17 }
18 }
19 p.end();
20 image.save("../image.png");
21 }
运行结果:

(4)QPicture绘制图片
说明:使用QPicture绘制图片,并保存为二进制文件,然后加载进行显示。
绘制保存图片的代码:
1 Widget::Widget(QWidget *parent) :
2 QWidget(parent),
3 ui(new Ui::Widget)
4 {
5 ui->setupUi(this);
6
7 QPicture picture;
8 QPainter painter;
9 painter.begin(&picture);
10 painter.drawPixmap(0, 0, 80, 80, QPixmap("../image/face.png"));
11 painter.drawLine(50, 50, 150, 50);
12 painter.end();
13 //保存的是二进制文件
14 picture.save("../picture.png");
15 }
加载,绘制事件:
1 void Widget::paintEvent(QPaintEvent *event)
2 {
3 QPicture pic;
4 //加载文件
5 pic.load("../picture.png");
6
7 QPainter p(this);
8 p.drawPicture(0, 0, pic);
9 }
运行测试:

(5)QPixmap与QImage之间的相互转换
说明:QPixmap和QImage之间可以使用函数相互转换。
测试代码:
1 void Widget::paintEvent(QPaintEvent *event)
2 {
3 QPainter p(this);
4 QPixmap pixmap;
5 pixmap.load("../image/face.png");
6
7 //QPixmap --> QImage
8 QImage tempImge = pixmap.toImage();
9 p.drawImage(0, 0, tempImge);
10
11 QImage image;
12 image.load("../image/face.png");
13 //QImage --> QPixmap
14 QPixmap tmpPixmap = QPixmap::fromImage(image);
15 p.drawPixmap(200, 0, tmpPixmap);
16 }
运行结果:

Qt-绘图设备的更多相关文章
- 界面编程之QT绘图和绘图设备20180728
/*******************************************************************************************/ 一.绘图 整 ...
- Qt绘图之QGraphicsScene QGraphicsView QGraphicsItem详解
Graphics View提供了一个界面,它既可以管理大数量的定制2D graphical items,又可与它们交互,有一个view widget可以把这些项绘制出来,并支持旋转与缩放.这个柜架也包 ...
- qt绘制设备
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from PyQt4.QtGui import * from Py ...
- Qt 绘图与动画系统
Qt 提供了内置的绘图系统以及独立的QtOpenGL模块提供对OpenGL的支持.Qt提供了基于状态机的QPainter系统和面向对象的Graphics View系统. QPainter 基于状态机的 ...
- Qt——绘图
1.涉及类 QPainter QPaintEngine QPaintDevice 作为绘图的使用者,只需要关注 QPainter 和 QPaintDevice 2.QPainter 使用 QPain ...
- QT_8_Qt中的事件处理_定时器事件_定时器类_事件分发器_事件过滤器_绘图事件_高级绘图事件_绘图设备_QFile 文件读写_QFileInfo文件信息
Qt中的事件处理 1.1. 捕获QLabel中是鼠标事件 1.2. enterevent 鼠标进入 1.3. leaveevent 鼠标离开 1.4. 鼠标按下MyLabel::mousePressE ...
- [Qt2D绘图]-05绘图设备-QPixmap&&QBitmap&&QImage&&QPicture
这篇笔记记录的是QPainterDevice(绘图设备,可以理解为一个画板) 大纲: 绘图设备相关的类:QPixmap QBitmap QImage QPicture QPixmap ...
- Qt 绘图(QBitmap,QPixmap,QImage,QPicture)
QPainter绘图绘图设备(QPixmap,QImage,QBitmap,QPicture) 重写绘图事件,虚函数 如果窗口绘图,必须放在绘图事件里实现 绘图事件内部自动调用,窗口需要重绘的时候,状 ...
- QPainter. QpaintDevice 绘图设备
QPaintDevice 绘图设备 1 QPixmap QImage Qbitmap(黑白色) QPicture QWidget 2 QPixmap 对不同平台做了显示优化 fill(填充颜色) Q ...
- Qt绘图
Qt绘图的设置 QPainter::Antialiasing // 反锯齿 QPainter::TextAntialiasing // 文字反锯齿 QPainter::SmoothPixmapTran ...
随机推荐
- vue3.0 中文文档(暂时)地址
https://v3.cn.vuejs.org/ https://vue-docs-next-zh-cn.netlify.app/guide/installation.html#vue-devtool ...
- Git中 fork, clone,branch
一.是什么 fork fork,英语翻译过来就是叉子,动词形式则是分叉,如下图,从左到右,一条直线变成多条直线 转到git仓库中,fork则可以代表分叉.克隆 出一个(仓库的)新拷贝 包含了原来的仓库 ...
- git合并某分支上的单次提交(cherry-pick)
1. 查找提交对应的hash值 git log 查看 d 查看下一页,q退出 vscode通过gitlens插件查看 2.合并提交 git cherry-pick hahs值
- 对key值理解
key相当于一种身份标识标识,就像我们的身份证用来辨识一个人一样. 每个key对应一个组件, 相同的key react会认为是同一个组件,这样后续相同的key对应组件都不会被创建.... 而有了key ...
- 码住!Flink Contributor 速成指南
简介: 不管初衷是什么,Flink 都非常欢迎大家一起建设和完善社区.在开始具体的贡献步骤之前,我们先简要介绍一下参与贡献的几种途径,以及 Clarify 关于开源贡献的一些固有印象. 作者:伍翀(云 ...
- 2024 年最值得推荐的 7 个 Vue3 组件库
你好,我是 Kagol. Vue 是一款易学易用,性能出色,适用场景丰富的渐进式 JavaScript 框架,深受广大开发者的喜爱,Vue3 更是推出了 Composition API,让逻辑复用更友 ...
- 2019-11-29-如何入门-C++-AMP-教程
title author date CreateTime categories 如何入门 C++ AMP 教程 lindexi 2019-11-29 08:20:37 +0800 2018-2-13 ...
- 前端使用 Konva 实现可视化设计器(8)- 预览框
请大家动动小手,给我一个免费的 Star 吧~ 大家如果发现了明显的 Bug,可以提 Issue 哟~ 这一章我们实现一个预览框,实时.可交互定位的. github源码 gitee源码 示例地址 预览 ...
- OLAP开源引擎对比之历史概述
前言 OLAP概念诞生于1993年,工具则出现在更早以前,有史可查的第一款OLAP工具是1975年问世的Express,后来走进千家万户的Excel也可归为此类,所以虽然很多数据人可能没听过OLAP, ...
- 【简说Python WEB】Bootstrap
目录 [简说Python WEB]Bootstrap Bootstrap的导航组件应用 404,500错误页面定制化 系统环境:Ubuntu 18.04.1 LTS Python使用的是虚拟环境:vi ...