一、Qt绘制事件
当应用程序收到绘制事件时,就会调用QWidget::paintEvent(),该函数就是绘制窗口的地方。
有两种方法要求重绘一个窗口
1.update() --把重绘事件添加到事件队列中
- 重复调用update()会被Qt合并为一次
- 不会产生图像的闪烁
- 可带参数指定重绘某个区域
2.repaint() --立即产生绘制事件
一般情况下不推荐使用此方法
只使用在需要立即重绘的特效情况下
可带参数指定重绘某个区域
基本绘制
- QPainter类提供绘制操作,其构造函数原型为:
QPainter(QPaintDevice *device);
- QPaintDevice代表绘制2D图像的画布;
- 如下继承QPaintDevice的类对象都可用于QPainter绘制
QWidget、QImage、QPixmap、QPicture、QPrinter、QSvgGenerator、
QGLPixelBuffer、QGLFrameBufferObject
二、Qt 2D绘图
QPainter
- 线和轮廓都可以用 画笔(QPen) 进行绘制,用 画刷(QBrush) 进行填充;
- 字体使用QFont类定义,当绘制文字时,Qt使用指定字体的属性,如果没有匹配的字体,Qt将使用最接近的字体;
- 通常情况下,QPainter以默认的坐标系统进行绘制,也可以用QMatrix类对坐标进行变换;
- 当绘制是,可以使用QPainter::RenderHint来告诉绘图引擎是否弃用反锯齿功能使图变得平滑;
- QPainter::RenderHint的可取值:
QPainter::Antialiasing:告诉绘图引擎应该在可能的情况下进行边的反锯齿绘制
QPainter::TextAntialiasing:尽可能的情况下文字的反锯齿绘制
QPainter::SmoothPixmapTransform:使用平滑的pixmap变换算法(双线性插值算法),而不是近邻插值算法;
QPainter的绘图函数总结如下:
函数 | 功能 | 函数 | 功能 |
drawArc() | 弧 | drawPixmap() | QPixmap表示的图像 |
drawChord() | 弦 | drawPoint() | 点 |
drawConvexPolygon() | 凸多边形 | drawPoints() | 多个点 |
drawEllipse() | 椭圆 | drawPolygon | 多边形 |
drawImage() | QImage表示的图像 | drawPolyline() | 多折线 |
drawLine() | 线 | drawRect() | 矩形 |
drawLines() | 多条线 | drawRects() | 多个矩形 |
drawPath() | 路径 | drawRoundRect() | 圆角矩形 |
drawPicture() | 按QPainter指令绘制 | drawText() | 文字 |
drawPie | 扇形 | drawTiledPixmap() | 平铺图像 |
drawLineSegments() | 绘 |