【Qt】2D绘图之填充规则
00. 目录
文章目录
- 00. 目录
- 01. 概述
- 02. 开发环境
- 03. 程序示例
- 04. 预留
- 05. 附录
01. 概述
绘制多边形的时候就提到了填充规则Qt::FillRule,填充路径时也要使用填充规则,这里一共有两个填充规则,分别是Qt::OddEventFill和Qt::WindingFill。其中Qt::OddEventFill使用的是奇偶填充规则,具体来说就是如果要判断一个点是否在图形中,那么可以从该点向图形外引一条水平线,如果该水平线与图形的交点的个数为奇数,那么该点就在图形中。这个规则是默认值,而Qt::WindingFill使用的是非零弯曲规则,具体来说就是,如果要判断一个点是否在图形中,那么可以从该点向图形外引一条水平线,如果该水平线与图形的边线相交,这个边线是顺时针绘制的,就标记为1;是逆时针绘制的就标记为-1。然后将所有的数值相加,如果结果不为0,那么该点就在图形中。
02. 开发环境
Windows系统:Windows10
Qt版本:Qt5.15或者Qt6
03. 程序示例
程序示例一:
QPainter painter(this);QPainterPath path;path.moveTo(50, 250);path.lineTo(50, 230);//从当前点到点(120, 60)之间绘制一条三次贝塞尔曲线path.cubicTo(QPointF(105, 40), QPointF(115, 80), QPointF(120, 60));path.lineTo(130, 130);//添加一个椭圆path.addEllipse(QPoint(130, 130), 30, 30);painter.setPen(Qt::darkYellow);//绘制路径painter.drawPath(path);//平移坐标系统后重新绘制路径path.translate(200, 0);painter.setPen(Qt::darkBlue);painter.drawPath(path);
执行结果:
程序示例二:
void Widget::paintEvent(QPaintEvent *)
{QPainter painter(this);QPainterPath path;path.addEllipse(10, 50, 100, 100);path.addRect(50, 100, 100, 100);painter.setBrush(Qt::cyan);painter.drawPath(path);painter.translate(180, 0);path.setFillRule(Qt::WindingFill);painter.drawPath(path);}
执行结果:
先绘制了一个包含相交的椭圆和矩形的路径,因为没有显示指定填充规则,则默认使用Qt::OddEventFill规则。然后将路径进行平移,重新使用Qt::WindingFill规则绘制了该路径。
04. 预留
05. 附录
源码下载:【Qt】2D绘图之填充规则.rar
【Qt】2D绘图之填充规则相关推荐
- Qt 2D绘图之二:抗锯齿渲染和坐标系统
一.抗锯齿渲染 1.1 逻辑绘图 图形基元的大小(宽度和高度)始终与其数学模型相对应,下图示意了忽略其渲染时使用的画笔的宽度的样子. 1.2 物理绘图(默认情况) 在默认的情况下,绘制会产生锯齿,并且 ...
- Qt 2D绘图功能简单总结
文章目录 Qt 2D绘图功能简单总结 Qt 2D绘图功能简单总结 Qt 的绘图功能非常强大,它可以绘制一切想要的图形,从最简单的一条直线到其他任何复杂的图形,还可以用来绘制文本和图片. Qt的绘图系统 ...
- Qt 2D绘图(5):绘制图像基础
Qt 2D绘图(5):绘制图像基础 本文为原创文章,转载请注明出处,或注明转载自"黄邦勇帅(原名:黄勇) 本文出自本人原创著作<Qt5.10 GUI完全参考手册>网盘地址: ht ...
- Qt中国象棋一—— Qt 2D 绘图入门
最近想用Qt写一个中国象棋的项目,在网上找了几个例子后,发现关于绘图部分基础为0 ,于是根据项目需要学习一下.查了一些网上的资料,在此总结一下:我比较喜欢的方式是用到什么学什么,或者自己想做一个东西, ...
- QT 2d绘图优化(一)
最近在用QT做一款白板软件,在开发过程中,发现了有如下几个问题 void drawLine(QPointF endpt) {path.quadTo(path.currentPosition(),(pa ...
- 使用Qt进行2D绘图
文章目录 基本绘制和填充 基本图形的绘制和填充 1. 绘制图形 2. 使用画笔 3. 使用画刷 渐变填充 1. 线性渐变 2. 径向渐变 3. 锥形渐变 坐标系统 抗锯齿渲染 1. 逻辑表示 2. 抗 ...
- 【Qt】2D绘图之渐变填充
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 线性渐变 04. 辐射渐变 05. 锥形渐变 06. 附录 01. 概述 在画刷中可以使用渐变填充.QGradient类就 ...
- [Qt教程] 第12篇 2D绘图(二)渐变填充
[Qt教程] 第12篇 2D绘图(二)渐变填充 楼主 发表于 2013-4-23 17:59:31 | 查看: 689| 回复: 1 渐变填充 版权声明 该文章原创于Qter开源社区,作者yafei ...
- [Qt教程] 第14篇 2D绘图(四)绘制路径
[Qt教程] 第14篇 2D绘图(四)绘制路径 楼主 发表于 2013-4-27 12:40:52 | 查看: 611| 回复: 0 绘制路径 版权声明 该文章原创于Qter开源社区(www.qte ...
最新文章
- php点击按钮加载控制器,php – Codeigniter 3自动加载控制器
- 吴恩达深度学习笔记(109)-循环神经网络模型(RNN介绍)
- iOS load方法和initialize方法的异同
- Spring Cloud Gateway真的有那么差吗?
- python是一门什么课程-为什么一定要让孩子学会一门编程语言?
- 谋定智慧农业-农民丰收节·万祥军:京东共聚黑山县三方合力
- 亚马逊计划明年推出云游戏服务,紧追微软谷歌;华为GaussDB数据库推出双分布式架构;腾讯擎天5G智慧灯杆助智慧城市服务升级……...
- 【算法基础笔记】常用的排序算法的时间、空间复杂度,部分排序算法原理
- CSS样式(三) - div盒子
- 聊一聊自来水营业收费系统
- python数字转换成中文大写_Python转换数字到中文大写格式
- 网络安全人员必考的几本证书
- 什么地图可以室内导航?室内导航技术发展趋势
- 企业如何进行客户细分 客户细分的方法和类型
- PDF工具Adobe Arcrobat Pro DC下载安装教程
- DBSCAN聚类——Python实现
- 浅谈DNS域名解析的过程
- eeepc 运用本领
- mac下 内存分析工具mat安装,使用mat分析:内存溢出、内存泄漏,结合jstat、jmap等命令的使用
- 常用的归一化(Normalization) 方法:BN、LN、IN、GN
热门文章
- UImenuController
- JAVA常见错误处理方法 和 JVM内存结构
- SharePoint 2010 使用自定义aspx页面替换列表默认的新建(NewForm.aspx),查看(DispForm.aspx)和编辑(EditForm.aspx)页面...
- [转](传输层)UDP协议
- 各类环境渗透测试简述
- ExtJS:鼠标移出菜单后菜单自动隐藏
- C#静态变量和非静态变量的区别
- vue 实现的评分小星星组件,包括半星
- 线性规划与网络流24题●09方格取数问题13星际转移问题
- 调用支付宝PHP接口API实现在线即时支付功能(UTF-8编码)