1. QPainter绘图事件 简介
Qt的绘图系统允许使用现同的API在屏幕和其他打印设备上进行绘制。整个绘图系统基于 QPainter、QPaintDevice、QPaintEngine 三个类。
QPainter 用来执行绘制的操作。
QPaintDevice 是一个二维空间的抽象,这个二维空间允许QPainter在其上面进行绘制,也就是QPainter工作的空间。
QPaintEngine 提供了画笔(QPainter)在不同的设备上进行绘制的统一的接口。QPaintEngine 类应用于QPainter和QPaintDevice之间,通常对开发人员是透明的。除非你需要自定义一个设备,否则你是不需要关系这个QPaintEngine这个类的。我们可以把QPainter理解为画笔,把QPaintDevice理解为使用画笔的地方,QPaintEngine理解为能让不同材质的纸张、屏幕都能使用同一种画笔。
三者的层次结构:
2. 绘图功能示例
GitHub源码仓库:Qt学习例程
创建 QWidget空工程。
Qt中绘图有专用的绘图事件函数。
重写:void Widget::paintEvent(QPaintEvent *),应用运行后就会自动调用该事件。
画线。
// 实例化画家对象,this指定绘图设备,当前窗口 QPainter painter(this); // 画一条线 painter.drawLine(QPoint(0,0), QPoint(100,100));
画圆。
// 实例化画家对象,this指定绘图设备 QPainter painter(this); // 画一条线 painter.drawLine(QPoint(0,0), QPoint(100,100)); // 画圆 painter.drawEllipse(QPoint(100,100), 100, 100); painter.drawEllipse(QPoint(100,100), 50, 30);
画矩形、画点。
// 画矩形 (左上角x坐标,左上角y坐标,宽度,高度) painter.drawRect(QRect(200,20,100,100)); // 画矩形 (左上角x坐标,左上角y坐标)(宽度,高度) painter.drawRect(QRect(QPoint(200,20),QSize(100,100))); // 这种方式会多出一个点,不方便使用 // 画矩形 (左上角x坐标,左上角y坐标)(右下角x坐标,右下角y坐标) painter.drawRect(QRect(QPoint(200,120),QPoint(300,220))); // 画点 painter.drawPoint(300,223);
画文字。
// 画文字 painter.drawText(QRect(20,200,50,50), "好好学习,天天向上");
设置画笔颜色、线宽(如上例子,默认的颜色是黑色,线宽为1)。
// 设置画笔颜色 QPen pen(QColor(255,0,0)); // 设置画笔线宽(只对点线圆起作用,对文字不起作用) pen.setWidth(3); // 让画家使用这个画笔 painter.setPen(pen);
设置画笔线条风格(默认是SolidLine实线)。
// 设置画笔线条风格,默认是SolidLine实线 // DashLine虚线,DotLine点线,DashDotLine、DashDotDotLine点划线 pen.setStyle(Qt::DashDotLine);
画刷,对封闭图形填充颜色。
// 画刷,对封闭图形填充色 QBrush brush(Qt::blue); // 让画家使用画刷 painter.setBrush(brush);
画刷设置风格。
// 画刷,对封闭图形填充色 QBrush brush(Qt::blue); // 设置画刷风格,默认是SolidPattern实心填充 brush.setStyle(Qt::Dense5Pattern); // 让画家使用画刷 painter.setBrush(brush);
GitHub源码仓库:Qt学习例程