网站开发项目建设经验/网络运营是做什么的
文章目录
- 前言
- QPainterPath 与 QPainter 的区别
- QPainterPath 的主要函数和成员
- 成员函数
- 构造函数和析构函数
- 路径操作
- 布尔运算
- 几何计算
- 示例代码
- 示例 1:绘制简单路径
- 示例 2:使用布尔运算合并路径
- 示例 3:计算路径长度和角度
- 更多用法...
- 总结
前言
QPainterPath
是 Qt 中用于绘制复杂形状的类。它提供了一种矢量图形的表示方式,允许用户绘制直线、曲线、矩形、圆形等图形,并进行布尔运算(如联合、相交、差集等)。与 QPainter
配合使用时,QPainterPath
可以显著简化绘图操作,并提高绘图的灵活性和可维护性。本文将详细介绍 QPainterPath
的功能、常用方法,并通过示例代码展示其实际应用。
QPainterPath 与 QPainter 的区别
QPainter
是 Qt 的基本绘图类,用于在设备上进行绘图操作,如绘制线条、矩形、文本和图像等。QPainter
直接在目标设备(如窗口、小部件或图像)上进行绘图操作。
QPainterPath
则是一个路径类,用于定义复杂的路径。这些路径可以包含多种图形元素,如直线、曲线、矩形和椭圆等。QPainterPath
主要用来描述图形,而 QPainter
用来绘制这些描述的图形。使用 QPainterPath
可以先定义图形路径,然后通过 QPainter
将其绘制到目标设备上。
在使用QPainterPath把路径画完之后,我们需要使用QPainter的drawPath
把路径画上去才行
QPainterPath 的主要函数和成员
成员函数
构造函数和析构函数
-
QPainterPath()
作用:构造一个空的路径对象。
参数:无。
返回值:无。
-
QPainterPath(const QPointF &startPoint)
作用:构造一个以
startPoint
为起点的路径对象。参数:
startPoint
:路径的起点。
返回值:无。
-
~QPainterPath()
作用:析构函数,销毁路径对象。
参数:无。
返回值:无。
路径操作
-
void moveTo(const QPointF &point)
作用:将路径的当前点移动到
point
。参数:
point
:新的当前点。
返回值:无。
-
void lineTo(const QPointF &point)
作用:从当前点绘制一条直线到
point
。参数:
point
:直线的终点。
返回值:无。
-
void arcTo(const QRectF &rect, qreal startAngle, qreal arcLength)
作用:绘制一个以
rect
为边界的圆弧,从startAngle
开始,弧长为arcLength
。参数:
rect
:圆弧的边界矩形。startAngle
:起始角度(以度为单位)。arcLength
:弧长(以度为单位)。
返回值:无。
-
void cubicTo(const QPointF &ctrlPt1, const QPointF &ctrlPt2, const QPointF &endPt)
作用:绘制一个三次贝塞尔曲线,从当前点到
endPt
,使用ctrlPt1
和ctrlPt2
作为控制点。参数:
ctrlPt1
:第一个控制点。ctrlPt2
:第二个控制点。endPt
:曲线的终点。
返回值:无。
-
void quadTo(const QPointF &ctrlPt, const QPointF &endPt)
作用:绘制一个二次贝塞尔曲线,从当前点到
endPt
,使用ctrlPt
作为控制点。参数:
ctrlPt
:控制点。endPt
:曲线的终点。
返回值:无。
-
void addRect(const QRectF &rect)
作用:向路径中添加一个矩形。
参数:
rect
:矩形区域。
返回值:无。
-
void addEllipse(const QRectF &rect)
作用:向路径中添加一个椭圆。
参数:
rect
:椭圆的边界矩形。
返回值:无。
-
void addPath(const QPainterPath &path)
作用:向当前路径中添加另一个路径。
参数:
path
:要添加的路径。
返回值:无。
-
void closeSubpath()
作用:闭合当前子路径。
参数:无。
返回值:无。
布尔运算
-
QPainterPath united(const QPainterPath &other) const
作用:返回当前路径和
other
路径的并集。参数:
other
:另一个路径。
返回值:并集路径。
-
QPainterPath intersected(const QPainterPath &other) const
作用:返回当前路径和
other
路径的交集。参数:
other
:另一个路径。
返回值:交集路径。
-
QPainterPath subtracted(const QPainterPath &other) const
作用:返回当前路径和
other
路径的差集。参数:
other
:另一个路径。
返回值:差路径。
几何计算
-
QRectF boundingRect() const
作用:返回路径的边界矩形。
参数:无。
返回值:边界矩形。
-
qreal length() const
作用:返回路径的长度。
参数:无。
返回值:路径长度。
-
QPointF pointAtPercent(qreal t) const
作用:返回路径中百分比
t
处的点。参数:
t
:路径长度的百分比(0 到 1 之间)。
返回值:路径上的点。
-
qreal angleAtPercent(qreal t) const
作用:返回路径中百分比
t
处的切线角度。参数:
t
:路径长度的百分比(0 到 1 之间)。
返回值:切线角度。
示例代码
示例 1:绘制简单路径
以下示例展示了如何使用 QPainterPath
绘制一条简单的路径,包括直线和曲线:
#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QPainterPath>class PathWidget : public QWidget {
protected:void paintEvent(QPaintEvent *event) override {QPainter painter(this);QPainterPath path;path.moveTo(50, 50);path.lineTo(150, 50);path.cubicTo(200, 0, 250, 100, 300, 50);painter.drawPath(path);}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);PathWidget widget;widget.show();return app.exec();
}
示例 2:使用布尔运算合并路径
以下示例展示了如何使用 QPainterPath
的布尔运算来合并两个路径:
#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QPainterPath>class BooleanPathWidget : public QWidget {
protected:void paintEvent(QPaintEvent *event) override {QPainter painter(this);QPainterPath path1;path1.addRect(50, 50, 100, 100);QPainterPath path2;path2.addEllipse(100, 100, 100, 100);QPainterPath unitedPath = path1.united(path2);painter.drawPath(unitedPath);}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);BooleanPathWidget widget;widget.show();return app.exec();
}
示例 3:计算路径长度和角度
以下示例展示了如何计算 QPainterPath
的长度和特定百分比处的角度:
#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QPainterPath>
#include <QDebug>class LengthAngleWidget : public QWidget {
protected:void paintEvent(QPaintEvent *event) override {QPainter painter(this);QPainterPath path;path.moveTo(50, 50);path.lineTo(150, 50);path.cubicTo(200, 0, 250, 100, 300, 50);qreal length = path.length();qreal angle = path.angleAtPercent(0.5);qDebug() << "Pathlength:" << length;qDebug() << "Angle at 50%:" << angle;painter.drawPath(path);}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);LengthAngleWidget widget;widget.show();return app.exec();
}
更多用法…
总结
QPainterPath
提供了一种强大且灵活的方式来定义和操作路径。通过与 QPainter
配合使用,可以轻松绘制复杂的图形和进行几何运算。QPainterPath
支持多种图形元素和布尔运算,使其成为绘制和处理矢量图形的理想选择。通过本文的介绍和示例代码,读者可以更好地理解 QPainterPath
的使用方法及其在实际应用中的强大功能。
相关文章:

详解Qt 之QPainterPath
文章目录 前言QPainterPath 与 QPainter 的区别QPainterPath 的主要函数和成员成员函数构造函数和析构函数路径操作布尔运算几何计算 示例代码示例 1:绘制简单路径示例 2:使用布尔运算合并路径示例 3:计算路径长度和角度 更多用法... 总结 前…...

深入理解Apache Kylin:从概念到实践
深入理解Apache Kylin:从概念到实践 引言 Apache Kylin 是一个分布式分析引擎,专为在大规模数据集上进行快速多维分析(OLAP)设计。自2015年开源以来,Kylin 已经成为许多企业在大数据分析领域的首选工具。本文将从概念…...

vue3框架Arco Design输入邮箱选择后缀
使用: <a-form-item field"apply_user_email" label"邮箱:" ><email v-model"apply_user_email" class"inputborder topinputw"></email> </a-form-item>import email from /componen…...

制作镜像
1.镜像 image: 是一个文件,包含了微型操作系统、核心代码(可执行程序)、依赖环境(库) 2.仓库 repository: 存放镜像文件的地方 3.容器: container :是运行镜像的地方--…...

Kylin系列(二)进阶
Kylin系列(二)进阶 目录 简介Kylin架构深入解析 Kylin架构概述核心组件 高级Cube设计 Cube设计原则Cube优化策略 实时数据分析 实时数据处理流程实时Cube构建 高级查询与优化 查询优化技术SQL优化 Kylin与BI工具集成 Tableau集成Power BI集成 监控与调优 系统监控性能调优 常…...

Maven实战.依赖(依赖范围、传递性依赖、依赖调解、可选依赖等)
文章目录 依赖的配置依赖范围传递性依赖传递性依赖和依赖范围依赖调解可选依赖最佳实践排除依赖归类依赖优化依赖 依赖的配置 依赖会有基本的groupId、artifactld 和 version等元素组成。其实一个依赖声明可以包含如下的一些元素: <project> ...<depende…...

关于React17的setState
不可变值 state必须在构造函数中定义 在setState之前不能修改state的值,不要直接修改state,使用不可变值 可能是异步更新 直接使用时异步的 this.setState({count: this.state.count 1 }, () > {console.log(count by callback, this.state.count) // 回调函…...

2024华为OD机试真题-英文输入法Python-C卷D卷-100分
2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++) 题目描述 主管期望你来实现英文输入法单词联想功能,需求如下: 依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词。 按字典序输出联想到的单词序列,如果联想不到,请输出用户输入的单词前缀。 注意 英…...

magento2 安装win环境和linux环境
win10 安装 安装前提,php,mysql,apach 或nginx 提前安装好 并且要php配置文件里,php.ini 把错误打开 display_errorsOn开始安装 检查环境 填写数据库信息 和ssl信息,如果ssl信息没有,则可以忽略 填写域名和后台地址࿰…...

【城市数据集】世界城市数据库和访问门户工具WUDAPT
世界城市数据库和访问门户工具WUDAPT WUDAPTLCZ分类具体步骤参考 在 城市气候研究中,用于描述城市特征的数据集一般采用基于类别的传统方法,将城市地区分为数量有限的类型,从而导致精确度下降。越来越多的新数据集以亚米微尺分辨率描述城市的…...

网络爬虫必备工具:代理IP科普指南
文章目录 1. 网络爬虫简介1.1 什么是网络爬虫?1.2 网络爬虫的应用领域1.3 网络爬虫面临的主要挑战 2. 代理IP:爬虫的得力助手2.1 代理IP的定义和工作原理2.2 爬虫使用代理IP的必要性 3. 代理IP的类型及其在爬虫中的应用3.1 动态住宅代理3.2 动态数据中心…...

JMeter接口测试-5.JMeter高级使用
JMeter高级使用 案例: 用户登录后-选择商品-添加购物车-创建订单-验证结果 问题: JMeter测试中,验证结果使用断言,但断言都是固定的内容假如要判断的内容(预期内容)是在变化的, 有时候还是不确定的, 那该怎么办呢? 解决&…...

网络安全大模型开源项目有哪些?
01 Ret2GPT 它是面向CTF二进制安全的工具,结合ChatGPT API、Retdec和Langchain进行漏洞挖掘,它能通过问答或预设Prompt对二进制文件进行分析。 https://github.com/DDizzzy79/Ret2GPT 02 OpenAI Codex 它是基于GPT-3.5-turbo模型,用于编写…...

【赠书第18期】人工智能B2B落地实战:基于云和Python的商用解决方案
文章目录 前言 1 方案概述 2 方案实施 2.1 云平台选择 2.2 Python环境搭建 2.3 应用开发与部署 2.4 应用管理 2.5 安全性与隐私保护 3 方案优势与效益 4 推荐图书 5 粉丝福利 前言 随着云计算技术的快速发展,越来越多的企业开始将业务迁移至云端&#x…...

《昇思25天学习打卡营第24天》
接续上一天的学习任务,我们要继续进行下一步的操作 构造网络 当处理完数据后,就可以来进行网络的搭建了。按照DCGAN论文中的描述,所有模型权重均应从mean为0,sigma为0.02的正态分布中随机初始化。 接下来了解一下其他内容 生成…...

KeePass密码管理工具部署
KeePass密码管理工具部署 安装包下载入口 双击执行,根据提示完成安装: 安装完成后如图:...

C#中导出dataGridView数据为Excel
C#中导出dataGridView数据为Excel #region 导出Excel功能函数 /// <summary> /// dataGridView 导出Excel功能函数 /// </summary> /// <param name"dataView">dataGridView数据表</param> /// <param name"filePath">路径…...

算法学习6——贪心算法
什么是贪心算法? 贪心算法是一种在每一步选择中都采取当前状态下最优或最有利的选择的算法。其核心思想是通过一系列局部最优选择来达到全局最优解。贪心算法广泛应用于各种优化问题,如最短路径、最小生成树、背包问题等。 贪心算法的特点 局部最优选…...

【C++】标准库:介绍string类
string 一.string类介绍二.string类的静态成员变量三.string类的常用接口1.构造函数(constructor)2.析构函数(destructor)3.运算符重载(operator)1.operator2.operator[]3.operator4.operator 4.string的四…...

未来不会使用 AI 的人真的会被淘汰吗?
AI 是今年大火的一个话题,随着 ChatGPT 之类的一系列大模型开始流行以后,有不少的培训机构宣称这样的口号: “未来不会使用 AI 的人将会被淘汰”。我觉得这个观点本身并没有错,但是关键在于那些培训机构出于自身的利益,故意忽略了…...

K8S及Rancher部署
前言 这篇文写的有点子啰嗦,甚至为了控制篇幅我还分出了其他好几篇文章,只在本文中保留了我认为必须存在。而之所以篇幅这么长,一方面是我在相关领域完全新手,啥啥都不会;而另一方面是我所参考的资料都过于精简&#…...

Qt Creator使用git管理代码
1.在GitHub中新建仓库,设置好仓库名后,其它的设置默认即可。 2.打开git bash,输入以下命令: git config --global user.name "xxxxx" #设置你的GitHub用户名 git config --global user.email "xxxxxxxxx.…...

pandas教程:pandas读取csv文件并指定字段数据类型
文章目录 pandas指定数据类型处理数据类型错误parse_dates参数pandas数据类型处理示例pandas指定数据类型 在读取csv文件时,我们可以使用dtype参数来指定每个列的数据类型。这个参数接受一个字典类型的值,其中键是列名,值是数据类型。数据类型可以是Pandas类型或NumPy类型,…...

c#中使用数据验证器
前言 在很多情况下,用户的输入不一定满足我们的设计要求,需要验证输入是否正确,传统的方案是拿到控件数据进行逻辑判定验证后,给用户弹窗提示。这种方法有点职责延后的感觉,数据视图层应该很好的处理用户的输入。使用…...

Java真人版猫爪老鼠活动报名平台系统
🐾“真人版猫爪老鼠活动报名平台系统”——趣味追逐,等你来战!🐭 🐱【萌宠变主角,现实版趣味游戏】 厌倦了电子屏幕的虚拟游戏?来试试“真人版猫爪老鼠活动”吧!在这个平台上&…...

Git原理与用法系统总结
目录 Reference前言版本控制系统Git的诞生配置Git配置用户名和邮件配置颜色配置.gitignore文件 Git的基础用法初始化仓库克隆现有的仓库添加暂存文件提交变动到仓库比较变动查看日志Git回退Git重置暂存区 Git版本管理重新提交取消暂存撤销对文件的修改 Git分支Git分支的优势Git…...

连载|浅谈红队中的权限维持(六)-Linux 主机后门与Linux 隐藏文件
本文来源无问社区,更多实战内容,渗透思路可前往查看http://www.wwlib.cn/index.php/artread/artid/11584.html 0x01 Linux 主机后门 1、添加用户 一句话添加用户 useradd test;echo -e "123456n123456n" |passwd test 或者使用 openssl …...

tomato-靶机渗透
tomato-靶机 一、安装靶机环境 下载双击.ova文件,写文件名路径导入 打开虚拟机用NAT模式 编辑–>虚拟网络编辑器查看IP段 二、信息收集 1.御剑端口扫描查找该虚拟机的IP 访问网站 扫目录 dirb http://192.168.30.130 收集到目录 /server-status /antibot_im…...

git的配置使用
第三周 Tursday 早 git日志的安装使用 [rootweb ~]# yum -y install git.x86_64 //安装软件包 [rootweb ~]# rpm -ql git //查看git的包 [rootweb ~]# mkdir /yy000 //创建新目录 [rootweb ~]# cd /yy000/ [rootweb yy000]# git init //将当前目录做为仓库…...

【1.0】drf初识
【1.0】drf初识 【一】前后端开发模式 【1】前后端混合开发 【示例】flask混合、django混合【案例】bbs项目 模板:dtl语法(django template language)模板语法 {{}} /{% %}后端渲染 qs对象–遍历循环到模板中–使用模板语法渲染渲染完成后 得到纯粹的…...