一、绘图,刷新界面的方法

1、绘图事件

  一般在绘图事件中绘图

 1     void paintEvent(QPaintEvent *);//绘图事件在窗口重绘的时候(即状态改变)的时候调用
 2     {
 3         //1、创建画家对象
 4         QPainter p(this);//指定当前窗口为绘图设备
 5
 6         //2、具体操作
 7         //画背景图    /* 不需要添加资源文件 */
 8         QPixmap("../Image/bk.png"));//参数:顶点坐标、长、宽
 9         //p.drawPixmap(rect(), QPixmap("../Image/bk.png"));//参数:定点坐标,宽,高,图片
10
11         //画直线
12         #if 0
13         //定义画笔     用以绘制轮廓线
14         QPen pen;
15         pen.setWidth(5); //设置线宽
16         //pen.setColor(Qt::red); //设置颜色
17         pen.setColor( QColor(14, 9, 234) );//rgb设置颜色
18         pen.setStyle(Qt::DashLine); //设置风格
19         //把画笔交给画家
20         p.setPen(pen);
21         #endif
22         p.drawLine(50,50,150,50);//起点和终点坐标
23
24         //画矩形
25         p.drawRect(50,50,150,150);
26
27         //画圆
28         p.drawEllipse(QPint(50,50),50,25);//参数:圆心    水平方向半径    垂直方向半径
29         #if 0//画刷        用以用来填充
30             QBrush brush; //创建画刷对象
31             brush.setColor(Qt::red); //设置颜色
32             brush.setStyle(Qt::Dense1Pattern);//设置样式
33             p.setBrush(brush);//把画刷交给画家
34         #endif
35     }    

2、手动刷新
  update();//库函数update,间接调用paintEvent

二、QBitmap和QPixmap
  QBitmap只有黑白2种颜色,而QPixmap彩色绘图
  当不需要彩色的时候,可以使用QBitmap;因为QBitmap耗费资源少。

1 //QPixmap和QBitmap的使用方法基本相同
2 QPainter p(this);
3 p.drawPixmap(0,0, QPixmap("../image.png"));
4 p.drawPixmap(200,0, QBitmap("../image.png"));//参数3    彩色图片显示的也是黑白

三、常用的绘图设备

  一般情况,QPixmap用于显示;QImage用于传输;
1、QPixmap:针对屏幕进行优化,和平台相关,不能对图片进行修改(像素点)

1 QPixmap pixmap(400,300);//直接指定绘图设备的大小400*300
2 QPainter p(&pixmap);    //画家
3 #if 0
4 //填充背景
5     p.fillRect(0,0,400,300, QBrush(Qt::white));
6     pixmap.fill(Qt::white);
7 #endif
8 p.drawPixmap(0,0,80,80, QPixmap("../image/face.png"));
9 pixmap.save("../pixmap.jpg);    //保存画家画的图片

2、QImage:和平台相关,可以对图片进行修改,可以在线程中绘图

 1 QImage image(400, 300, QImage::Format_ARGB32);//QImage::Format_ARGB32背景是透明
 2 QPainter p(&image);
 3 //绘图
 4 p.drawImage(0, 0, QImage("../Image/face.png"));//drawPixmap()也行
 5 //对绘图设备前50个像素点进行操作
 6 for(int i = 0; i < 50; i++)
 7 {
 8     for(int j = 0; j < 50; j++)
 9     {
10         image.setPixel(QPoint(i, j), qRgb(0, 255, 0));
11     }
12 }
13 image.save("../image.png");    

3、QPicture:保存绘图的状态(二进制文件)

1 QPicture picture;
2 QPainter p(&picture);
3 p.drawPixmap(0,0,80,80, QPixmap("../image/face.png"));
4 picture.save("../picture");//保存的是二进制文件
5 #if 0//加载QPicture图片
6   QPicture pic;
7   pic.load("../picture");
8 #endif

4、QPixmap与QImage的转换
//QImage用于传输、QPixmap用于显示

 1 QPainter p(this);
 2 QPixmap pixmap;
 3 pixmap.load("../Image/face.png");
 4 //QPixmap -> QImage
 5 QImage tempImage = pixmap.toImage();
 6 p.drawImage(0, 0, tempImage);
 7
 8 QImage image;
 9 image.load("../Image/face.png");
10 //QImage -> QPixmap
11 QPixmap tempPixmap = QPixmap::fromImage(image);
12 p.drawPixmap(100, 0, tempPixmap);

转载于:https://www.cnblogs.com/wangbin-heng/p/9484272.html

Qt绘图事件:QPainter、QPaintEngine和QPaintDevice相关推荐

  1. qt绘图事件(画刷的填充)

    本文主要参考qt5.9 c++开发指南 画刷的不同填充效果: QPainter painter(this);int W = this->width(); //绘图区宽度int H = this- ...

  2. 【Qt教程】3.4 - Qt5 QPainter绘图事件、绘图功能

    1. QPainter绘图事件 简介 Qt的绘图系统允许使用现同的API在屏幕和其他打印设备上进行绘制.整个绘图系统基于 QPainter.QPaintDevice.QPaintEngine 三个类. ...

  3. 【Qt教程】3.5 - Qt5 QPainter绘图抗锯齿、相对坐标/平移坐标系、QPainter画图片、手动调用QPainter绘图事件

    GitHub源码仓库:Qt学习例程 1. QPainter绘图抗锯齿 /// 抗锯齿测试 /// painter.drawEllipse(QPoint(100,50), 50, 50);// 设置 抗 ...

  4. 【Qt】2D基本绘图操作——QPainter执行绘制及绘图设备介绍

    文章目录 QPainter绘图 绘图设备 QPixmap QImage QPicture Qt实现2D绘图主要基于QPainter.QPaintDevice.QPaintEngine三个类,- - Q ...

  5. qt 绘图QPainter

    QPainter绘图系统 QPainter用来进行绘图操作的类.绘图设备一般包括Qwidget.Qpixmap.QImage.他们提供给QPainter画布. QPaintDevice是一个可以使用Q ...

  6. 【QT 5 学习笔记-学习绘图相关+画线图形等+绘图事件+基础学习(1)】

    [QT 5 学习笔记-学习绘图相关+画线图形等+绘图事件+基础学习(1)] 1.说明 2.实验环境 3.参照学习链接 4.自己的学习与理解 5.学习与实践代码. (1)建立基础工程. (2)加入绘图事 ...

  7. QT学习日记15——绘图事件

    学习视频链接 最新QT从入门到实战完整版|传智教育_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1g4411H78N?p=37&vd_sourc ...

  8. c++ qt获取电脑的内存_QT开发(十四)——QT绘图系统

    一.QT绘图原理 Qt4中的2D绘图系统称为Arthur绘图系统,可以使用相同的API在屏幕上和绘图设备上进行绘制,主要基于QPainter.QPainterDevice和 QPainterEngin ...

  9. qt绘画事件-设置背景图片

    前言 设置widget的背景图片,并在背景图片上放置别的图片 直接上代码: 头文件 void paintEvent(QPaintEvent *); cpp文件: void MainWindow::pa ...

最新文章

  1. NYOJ-括号配对问题 技巧性的非栈道法
  2. 怎么查看有关cas的报错_Linux LVM I/O报错,你也遇到这样的问题吗?
  3. Linux常见的一些性能监控命令
  4. 【Java多线程】Join的使用、如何使用getState()查看线程的状态
  5. java json jar包_jsonobject jar包下载
  6. python目前版本强势英雄_王者荣耀目前版本什么英雄强势?
  7. Java 设计模式-【单例模式】
  8. assert和if的使用
  9. c语言高低位拷贝_C语言中的大小端转换与高低位颠倒
  10. Ubuntu15.10使用mysql
  11. struts配置json需要的jar包
  12. 【iOS】iOS开发编码规范小结
  13. Python进阶【第九篇】装饰器
  14. 王川: 重要的东西, 往往是看不见的
  15. python内嵌浏览器_内嵌web浏览器
  16. bat计算机清理原理,使用bat脚本清理系统垃圾的方法
  17. 学习阶段小测,简单的幸运抽奖系统
  18. 大数据开发培训课程:Hive的静态分区与动态分区
  19. Python_Number类及容器类基本数据类型
  20. 电脑怎么打出冒号符号_电脑标点符号怎么打(图文)

热门文章

  1. 多域名下Mvc的Http缓存冲突的问题
  2. Jmeter(二十二)_jenkins配置gitlab插件与ant插件
  3. asp控件Repeater运用
  4. 11款有用的Web开发在线工具
  5. 招聘职位:ERP咨询顾问(广州、厦门)
  6. docker 安装ElasticSearch 6.x
  7. 源码梳理——Jedis中的集合JedisByteHashMap
  8. 服务器系统的王者——Linux 系统
  9. C++ Primer笔记 容器和算法(2)
  10. 笔记--------手动分页