博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt绘图事件:QPainter、QPaintEngine和QPaintDevice
阅读量:5066 次
发布时间:2019-06-12

本文共 2876 字,大约阅读时间需要 9 分钟。

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

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 013         //定义画笔     用以绘制轮廓线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         #endif22         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         #endif35     }

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*3002 QPainter p(&pixmap);    //画家3 #if 04 //填充背景    5     p.fillRect(0,0,400,300, QBrush(Qt::white));6     pixmap.fill(Qt::white);7 #endif8 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 -> QPixmap11 QPixmap tempPixmap = QPixmap::fromImage(image);12 p.drawPixmap(100, 0, tempPixmap);

 

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

你可能感兴趣的文章
908. Smallest Range I
查看>>
ThinkPHP 分页实现
查看>>
jQuery在线手册
查看>>
APPLE-SA-2019-3-25-3 tvOS 12.2
查看>>
Python定义点击右上角关闭按钮事件
查看>>
刚刚开始
查看>>
Optional 的基本用法
查看>>
洋葱第4场C和D题解……
查看>>
php实现隐藏字符串的功能
查看>>
设计模式08: Composite 组合模式(结构型模式)
查看>>
编写高质量代码改善C#程序的157个建议——建议157:从写第一个界面开始,就进行自动化测试...
查看>>
公网IP和私有IP的区别和用途
查看>>
在一台win10上启动多个mysql
查看>>
TensorFlow 从零到helloWorld
查看>>
@class、#import
查看>>
iOS 正则表达式使用的三种方式&语法
查看>>
kafka的使用
查看>>
AT2672 Coins
查看>>
团队计划会议-01
查看>>
Linux0.11内核--加载可执行二进制文件之1.copy_strings
查看>>