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绘图之绘制路径相关推荐

  1. 【Qt】2D绘图之绘制图像(二)

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 绘制QImage图像 04. 绘制QPixmap图像 05. 绘制QPicture图像 06. 综合对比 07. 附录 0 ...

  2. 【Qt】2D绘图之绘制图片

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 简单绘制图片 04. 平移图片 05. 缩放图片 06. 旋转图片 07. 扭曲图片 08. 附录 01. 概述 Qt提供 ...

  3. 【Qt】2D绘图之绘制文字

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 基本绘制 04. 使用范围绘制文字 05. 使用字体绘制文字 06. 附录 01. 概述 Qt中除了绘制图形以外,还可以使 ...

  4. 【Qt】2D绘图之绘制简单的图形

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 绘制图形 04. 画笔和画刷 05. 绘制弧线 06. 附录 01. 概述 Qt中提供了强大的2D绘图系统,可以使用同一A ...

  5. Qt 2D绘图(5):绘制图像基础

    Qt 2D绘图(5):绘制图像基础 本文为原创文章,转载请注明出处,或注明转载自"黄邦勇帅(原名:黄勇) 本文出自本人原创著作<Qt5.10 GUI完全参考手册>网盘地址: ht ...

  6. Qt 2D绘图功能简单总结

    文章目录 Qt 2D绘图功能简单总结 Qt 2D绘图功能简单总结 Qt 的绘图功能非常强大,它可以绘制一切想要的图形,从最简单的一条直线到其他任何复杂的图形,还可以用来绘制文本和图片. Qt的绘图系统 ...

  7. Qt 2D绘图之二:抗锯齿渲染和坐标系统

    一.抗锯齿渲染 1.1 逻辑绘图 图形基元的大小(宽度和高度)始终与其数学模型相对应,下图示意了忽略其渲染时使用的画笔的宽度的样子. 1.2 物理绘图(默认情况) 在默认的情况下,绘制会产生锯齿,并且 ...

  8. Qt中国象棋一—— Qt 2D 绘图入门

    最近想用Qt写一个中国象棋的项目,在网上找了几个例子后,发现关于绘图部分基础为0 ,于是根据项目需要学习一下.查了一些网上的资料,在此总结一下:我比较喜欢的方式是用到什么学什么,或者自己想做一个东西, ...

  9. 32 Qt 之绘图之绘制一个漂亮的西瓜

    简笔画 我们先简单看看西瓜的基本组成,一步步进行拆分.组合. 绘制 效果 具体的效果如下所示,我们可以再进行更好的完善. 源码 主要分为以下三部: 绘制外圆(绿色部分) 绘制内圆(红色部分) 绘制椭圆 ...

最新文章

  1. 沈向洋回答吴恩达:我预见的2021
  2. zzuli 2525: 咕咕的搜索序列
  3. crawler碎碎念5 豆瓣爬取操作之登录练习
  4. 终端terminal的颜色配置
  5. Java自动化测试框架-07 - TestNG之Factory篇 - (详细教程)
  6. 频率波数域matlab,频率-波数域方法的发展及其在台阵数据分析中的应用
  7. 基因表达式编程的任务指派问题求解算法设计与实现
  8. c语言从入门到精通pdf 百度云,c语言从入门到精通PDF
  9. linux c如何判断字符串是否为空
  10. Matlab心电信号QRS波检测
  11. 服务器fs改变文件内容,SeaweedFS文件系统
  12. 8.8.6. Polygons
  13. 字节跳动+京东+美团+腾讯面试总结,附赠课程+题库
  14. 笔试题6——幸福数字
  15. java将占位符替换成指定字符串的函数
  16. VBScript的中ByRef和ByVal的不同
  17. IRP(I/O Request Package)详解
  18. 西电计算机学院崔江涛,“师德标兵”崔江涛:人才培养的研究者与实践者
  19. 云游戏,玩什么比怎么玩更重要
  20. Python快速上手系列--类--详解篇

热门文章

  1. BZOJ 1055 [HAOI2008]玩具取名
  2. 西南往事回忆录—工作点滴
  3. 維護webflow:request、session、application、page
  4. android+qq登录测试,对于android的第三方(QQ登录,微信登录等的)测试时的签名配置...
  5. php能不能动态显示html5,php – 是否可以动态生成html5缓存清单?
  6. 腾讯2011.10.15校园招聘会笔试题
  7. C#数组 动态添加元素
  8. string (KMP+期望DP)
  9. Tomcat连接池配置
  10. 两个操作字符串的方法:读取指定位置的字符和找出某个字符串的位置