一、绘图,刷新界面的方法
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);