【Qt】2D绘图之绘制路径
00. 目录
文章目录
- 00. 目录
- 01. 概述
- 02. 开发环境
- 03. 绘制简单路径
- 04. 复制图形路径
- 05. 位置问题探讨
- 06. 附录
01. 概述
如果要绘制一个复杂的图形,尤其是要重复绘制这样的图形,那么可以使用QPainterPath类,然后使用QPainter::drawPath()来进行绘制。QPainterPath类为绘制操作提供了一个容器,可以用来创建图形并且重复使用。一个绘图路径就是由多个矩形、椭圆、线条或者曲线等组成的对象,一个路径可以是封闭的,例如矩形和椭圆;也可以是非封闭的,例如线条和曲线。
02. 开发环境
Windows系统:Windows10
Qt版本:Qt5.15或者Qt6
03. 绘制简单路径
程序示例
void Widget::paintEvent(QPaintEvent *)
{QPainter painter(this);QPainterPath path;//绘制圆形path.addEllipse(100, 100, 50, 50);//绘制直线path.moveTo(100, 100);path.lineTo(200, 200);painter.setPen(Qt::green);painter.setBrush(Qt::red);//绘制路径painter.drawPath(path);
}
当创建一个QPainterPath对象后,可以使用lineTo()、arcTo()、cubicTo()和quadTo()等函数将直线或者曲线添加到路径中。运行程序,效果如下图所示。
04. 复制图形路径
如果只是简单的将几个图形拼接在一起,其实完全没有必要用路径,之所以要引入路径,就是因为它的一个非常有用的功能:复制图形路径。
程序示例:
void Widget::paintEvent(QPaintEvent *)
{QPainter painter(this);QPainterPath path;//绘制圆形path.addEllipse(100, 100, 50, 50);//绘制直线path.moveTo(100, 100);path.lineTo(200, 200);painter.setPen(Qt::green);painter.setBrush(Qt::red);//绘制路径painter.drawPath(path);QPainterPath path2;path2.addPath(path);path2.translate(100, 100);painter.drawPath(path2);
}
执行结果:
对于已经绘制好的路径,可以非常简单地进行重复绘制。
05. 位置问题探讨
程序示例一:
void Widget::paintEvent(QPaintEvent *)
{QPainterPath path;path.lineTo(100, 100);path.lineTo(200, 100);QPainter painter(this);painter.drawPath(path);}
可以看到,创建路径后,默认是从(0, 0)点开始绘制的,当绘制完第一条直线后当前位置是(100, 100)点,从这里开始绘制第二条直线。绘制完第二条直线后,当前位置是(200, 100)。
执行结果:
程序示例二:
void Widget::paintEvent(QPaintEvent *)
{QPainterPath path;path.addRect(50, 50, 40, 40);path.lineTo(0, 0);QPainter painter(this);painter.setPen(QColor(Qt::red));painter.drawPath(path);}
执行结果:
当绘制完矩形后,当前位置在矩形的左上角顶点,然后从这里开始绘制后面的直线。
程序示例三:
void Widget::paintEvent(QPaintEvent *)
{QPainterPath path;path.addRect(50, 50, 40, 40);//改变当前位置为(100, 100)path.moveTo(100, 100);path.lineTo(0, 0);QPainter painter(this);painter.setPen(QColor(Qt::red));painter.drawPath(path);}
执行结果:
06. 附录
源码下载:【Qt】2D绘图之绘制路径.rar
【Qt】2D绘图之绘制路径相关推荐
- 【Qt】2D绘图之绘制图像(二)
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 绘制QImage图像 04. 绘制QPixmap图像 05. 绘制QPicture图像 06. 综合对比 07. 附录 0 ...
- 【Qt】2D绘图之绘制图片
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 简单绘制图片 04. 平移图片 05. 缩放图片 06. 旋转图片 07. 扭曲图片 08. 附录 01. 概述 Qt提供 ...
- 【Qt】2D绘图之绘制文字
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 基本绘制 04. 使用范围绘制文字 05. 使用字体绘制文字 06. 附录 01. 概述 Qt中除了绘制图形以外,还可以使 ...
- 【Qt】2D绘图之绘制简单的图形
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 绘制图形 04. 画笔和画刷 05. 绘制弧线 06. 附录 01. 概述 Qt中提供了强大的2D绘图系统,可以使用同一A ...
- Qt 2D绘图(5):绘制图像基础
Qt 2D绘图(5):绘制图像基础 本文为原创文章,转载请注明出处,或注明转载自"黄邦勇帅(原名:黄勇) 本文出自本人原创著作<Qt5.10 GUI完全参考手册>网盘地址: ht ...
- Qt 2D绘图功能简单总结
文章目录 Qt 2D绘图功能简单总结 Qt 2D绘图功能简单总结 Qt 的绘图功能非常强大,它可以绘制一切想要的图形,从最简单的一条直线到其他任何复杂的图形,还可以用来绘制文本和图片. Qt的绘图系统 ...
- Qt 2D绘图之二:抗锯齿渲染和坐标系统
一.抗锯齿渲染 1.1 逻辑绘图 图形基元的大小(宽度和高度)始终与其数学模型相对应,下图示意了忽略其渲染时使用的画笔的宽度的样子. 1.2 物理绘图(默认情况) 在默认的情况下,绘制会产生锯齿,并且 ...
- Qt中国象棋一—— Qt 2D 绘图入门
最近想用Qt写一个中国象棋的项目,在网上找了几个例子后,发现关于绘图部分基础为0 ,于是根据项目需要学习一下.查了一些网上的资料,在此总结一下:我比较喜欢的方式是用到什么学什么,或者自己想做一个东西, ...
- 32 Qt 之绘图之绘制一个漂亮的西瓜
简笔画 我们先简单看看西瓜的基本组成,一步步进行拆分.组合. 绘制 效果 具体的效果如下所示,我们可以再进行更好的完善. 源码 主要分为以下三部: 绘制外圆(绿色部分) 绘制内圆(红色部分) 绘制椭圆 ...
最新文章
- 沈向洋回答吴恩达:我预见的2021
- zzuli 2525: 咕咕的搜索序列
- crawler碎碎念5 豆瓣爬取操作之登录练习
- 终端terminal的颜色配置
- Java自动化测试框架-07 - TestNG之Factory篇 - (详细教程)
- 频率波数域matlab,频率-波数域方法的发展及其在台阵数据分析中的应用
- 基因表达式编程的任务指派问题求解算法设计与实现
- c语言从入门到精通pdf 百度云,c语言从入门到精通PDF
- linux c如何判断字符串是否为空
- Matlab心电信号QRS波检测
- 服务器fs改变文件内容,SeaweedFS文件系统
- 8.8.6. Polygons
- 字节跳动+京东+美团+腾讯面试总结,附赠课程+题库
- 笔试题6——幸福数字
- java将占位符替换成指定字符串的函数
- VBScript的中ByRef和ByVal的不同
- IRP(I/O Request Package)详解
- 西电计算机学院崔江涛,“师德标兵”崔江涛:人才培养的研究者与实践者
- 云游戏,玩什么比怎么玩更重要
- Python快速上手系列--类--详解篇
热门文章
- BZOJ 1055 [HAOI2008]玩具取名
- 西南往事回忆录—工作点滴
- 維護webflow:request、session、application、page
- android+qq登录测试,对于android的第三方(QQ登录,微信登录等的)测试时的签名配置...
- php能不能动态显示html5,php – 是否可以动态生成html5缓存清单?
- 腾讯2011.10.15校园招聘会笔试题
- C#数组 动态添加元素
- string (KMP+期望DP)
- Tomcat连接池配置
- 两个操作字符串的方法:读取指定位置的字符和找出某个字符串的位置