【Qt教程】3.4 - Qt5 QPainter绘图事件、绘图功能

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));

【Qt教程】3.4 - Qt5 QPainter绘图事件、绘图功能_第1张图片

 

画圆。

// 实例化画家对象,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);

【Qt教程】3.4 - Qt5 QPainter绘图事件、绘图功能_第2张图片

 

画矩形、画点。

// 画矩形 (左上角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);

【Qt教程】3.4 - Qt5 QPainter绘图事件、绘图功能_第3张图片

 

画文字。

// 画文字
painter.drawText(QRect(20,200,50,50), "好好学习,天天向上");

【Qt教程】3.4 - Qt5 QPainter绘图事件、绘图功能_第4张图片

 

设置画笔颜色、线宽(如上例子,默认的颜色是黑色,线宽为1)。

// 设置画笔颜色
QPen pen(QColor(255,0,0));
// 设置画笔线宽(只对点线圆起作用,对文字不起作用)
pen.setWidth(3);
// 让画家使用这个画笔
painter.setPen(pen);

【Qt教程】3.4 - Qt5 QPainter绘图事件、绘图功能_第5张图片

 

设置画笔线条风格(默认是SolidLine实线)。

// 设置画笔线条风格,默认是SolidLine实线
// DashLine虚线,DotLine点线,DashDotLine、DashDotDotLine点划线
pen.setStyle(Qt::DashDotLine);

【Qt教程】3.4 - Qt5 QPainter绘图事件、绘图功能_第6张图片

 

 

画刷,对封闭图形填充颜色。

// 画刷,对封闭图形填充色
QBrush brush(Qt::blue);
// 让画家使用画刷
painter.setBrush(brush);

【Qt教程】3.4 - Qt5 QPainter绘图事件、绘图功能_第7张图片

 

画刷设置风格。

// 画刷,对封闭图形填充色
QBrush brush(Qt::blue);
// 设置画刷风格,默认是SolidPattern实心填充
brush.setStyle(Qt::Dense5Pattern);
// 让画家使用画刷
painter.setBrush(brush);

【Qt教程】3.4 - Qt5 QPainter绘图事件、绘图功能_第8张图片

 

GitHub源码仓库:Qt学习例程

你可能感兴趣的:(Qt界面基础,qt,c++,gui,嵌入式)