QPainter 能绘制点、直线、圆、矩形等各种基本图形,还可以绘制文字和位图,用这些基本图形可以组成任何想要的图形。
QPainter绘图主要有以下概念
1.绘图设备
绘图设备包括 QWidget、 QPixmap、QPrinter 等。 QWidget 是最常见的绘图设备,所有的界面组件都是从 QWidget 继承而来的,界面组件的显示效果实际上是 QPainter 在 QWidget 上实现的。
QWidget | QWidget 是所有界面组件的基类,是最常见 的绘图设备类, 它有 QPaintDevice 和 QObject 两个父类,所以支持 Qt 的元对象系统。 |
QImage | QImage 是与件无关的表示图片的类,是为设备输入输出而优化设计的类,它可以直接进行图片像素数据的访问和操作。 |
QPixmap | QPixmap 是为在屏幕上显示图片而优化设计的类。 |
QBitmap | QBitmap 是 QPixmap 的子类,用于表示 1 位色深的单色位图。 |
QPicture | QPicture 是用于记录和回放 QPainter 指令的类。 |
QSvgGenerator | QSvgGenerator 是用于创建 SVG 图形的绘图设备类,可缩放矢量图形( scalable vectorgraphics, SVG)是一种图片文件格式。使用 QPainter 可以在一个 QSvgGenerator 对象上绘图, 并能将其直接保存为 SVG 文件。 Qt 还提供了显示 SVG 图片文件的组件类 QSvgWidget。 |
QOpenGLPaintDevice | QOpenGLPaintDevice 是能用 OpenGL 渲染 QPainter 绘图指令的绘图设备类,它需要系统支持 2.0 以上版本的 OpenGL 或 OpenGL ES。 |
QPagedPaintDevice | QPagedPaintDevice 是支持多个页面的绘图设备类,通常用于生成打印输出或 PDF 文件。QPrinter 是用于打印输出的类,打印输出实际上就是在 QPrinter 设备上绘图,可以生成一系列用于打印输出的页面。 QPdfWriter 是用于生成 PDF 文件的绘图设备类,使用 QPrinter在 QPdfWriter 设备上绘图就可以将绘图内容直接保存为 PDF 文件。 |
2.绘图事件paintEvent
需要在绘图事件paintEvent中,里创建一个 QPainter 对象来获取绘图设备的接口,然后用这个 QPainter 对象在绘图设备上绘图。
3.绘图过程
声明painter
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);//抗锯齿 高保真
painter.setRenderHint(QPainter::TextAntialiasing);
设置画笔
QPen pen;
pen.setWidth(3);//线粗
pen.setColor(Qt::red);//线条 颜色
pen.setStyle((Qt::SolidLine));//实线
pen.setCapStyle(Qt::FlatCap);//线的端点样式
pen.setJoinStyle(Qt::BevelJoin);//两节点样式
painter.setPen(pen);
设置画刷
QBrush brush;
brush.setColor(Qt::green);
brush.setStyle(Qt::SolidPattern);//画刷填充样式
painter.setBrush(brush);
绘图命令
int W = this->width();
int H = this->height();
QRect rect(W/4,H/4,W/2,H/2);
painter.drawRect(rect);