绘制路径

news2024/12/23 1:23:31

QPainterPath(绘制器)

QPainterPath类提供一个容器,可以用来创建图形并且重复使用。绘制器路径是由许多图形构建基块(如矩形、椭圆形、直线和曲线)组成的对象。构建基块可以连接在封闭的子路径中,例如作为矩形或椭圆。封闭路径具有重合的起点和终点。或者它们可以作为未闭合的子路径独立存在,例如直线和曲线。

构造函数:

 常用函数:

这里只是部分,更多请看官方文档。

addEllipse()在指定的矩形添加椭圆
addPath()添加路径
addPolygon()添加多边形
addRect()添加矩形
addRoundRect()添加圆角矩形
addText()添加文字,子路径的位置使文本基线的左端位于指定
clear()清除所有
cubicTo()添加贝塞尔曲线
elementCount返回容器中的路劲元素个数
elementAt()获取路径中的一个元素
length()返回路径长度
isEment()判空
lineTo()绘制一条直线
moveTo()将当前点移动到给定
currentPosition()获取当前的点
translate()平移移动
setFillRule()设置填充方式

QPainterPath::setFillRule(Qt::FillRule fillRule)

Qt::OldEvenFill奇偶填充(默认)
Qt::WindingFill非零弯曲规则
  • Qt::OldEvenFill:绘制一条从点到形状外部位置的水平线,并计算交点数。如果交点数为奇数,则点位于形状内部。
  • Qt::WindingFill:绘制一条从点到形状外部位置的水平线。确定每个交点处的直线方向是向上还是向下。绕组编号是通过对每个交叉点的方向求和来确定的。如果数字不为零,则点位于形状内。在大多数情况下,此填充模式也可以被视为闭合形状的交集。

绘制贝塞尔曲线:

这个曲线的绘制的机制不太了解,想了解的可以百度。

贝塞尔曲线_百度百科 (baidu.com)

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPainterPath path;//创建一个绘制路径
    path.cubicTo(99,0,50,50,99,99);
    painter.setPen(Qt::blue);
    painter.drawPath(path);//添加绘制路径
}

 绘制直线:

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPainterPath path;//创建一个绘制路径
    path.cubicTo(99,0,50,50,99,99);//绘制贝塞尔曲线
    path.moveTo(100,100);//移动坐标
    path.lineTo(100,200);//绘制直线
    path.lineTo(200,100);//绘制直线
    painter.setPen(Qt::blue);
    painter.drawPath(path);//添加绘制路径
}

 绘制其他图形:

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPainterPath path;//创建一个绘制路径
    path.addRect(0,0,50,50);//绘制矩形
    path.addEllipse(100,100,50,50);//绘制圆形
    path.addText(200,200,QFont("宋体",12),tr("绘制器"));//绘制文字
    painter.setPen(Qt::blue);
    painter.drawPath(path);//添加绘制路径
}

 填充规则的示例:

Qt::OldEvenFill(默认填充)

通过覆盖的层数来判断

  • 偶数个图形重叠,重叠颜色为底色
  • 奇数个图形重叠,重叠颜色为本身的颜色

两个图形重叠:重叠处颜色为底色

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPainterPath path;//创建一个绘制路径
    path.addEllipse(QPointF(200,200),100,100);
    path.addRect(0,0,200,200);
    painter.setPen(Qt::blue);
    painter.setBrush(Qt::red);//添加画刷
    painter.drawPath(path);//添加绘制路径
}

 三个图形重叠:重叠处颜色为本身的颜色

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPainterPath path;//创建一个绘制路径
    path.addEllipse(QPointF(200,200),100,100);
    path.addEllipse(QPointF(200,100),100,100);
    path.addRect(0,0,200,200);
    painter.setPen(Qt::blue);
    painter.setBrush(Qt::red);//添加画刷
    painter.drawPath(path);//添加绘制路径
}

 其他多个层叠以此类推。

Qt::WindingFill

 重叠处的颜色为图形颜色

两个图形重叠:

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPainterPath path;//创建一个绘制路径
    path.addEllipse(QPointF(200,200),100,100);
    //path.addEllipse(QPointF(200,100),100,100);
    path.addRect(0,0,200,200);
    path.setFillRule(Qt::WindingFill);//设置非0弯曲填充
    painter.setPen(Qt::blue);
    painter.setBrush(Qt::red);//添加画刷
    painter.drawPath(path);//添加绘制路径
}

 三个图形重叠:

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPainterPath path;//创建一个绘制路径
    path.addEllipse(QPointF(200,200),100,100);
    path.addEllipse(QPointF(200,100),100,100);
    path.addRect(0,0,200,200);
    path.setFillRule(Qt::WindingFill);//设置非0弯曲填充
    painter.setPen(Qt::blue);
    painter.setBrush(Qt::red);//添加画刷
    painter.drawPath(path);//添加绘制路径
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/32425.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ALU——调用加法乘法模块

只调用加法模块的仿真图: (注:alu_control 为十六进制 001高位加载 src2的低16位加载到高16位上 002算数右移 src1算数右移 (高位补1) 004逻辑右移 src1逻辑右移 (逻辑右移直接补0) 008逻辑左移…

MagicPods(在Windows电脑上可以实现airpods2弹窗,查看单个耳机电量、充电仓电量)

1.MagicPods的安装方式 Windows电脑下打开Microsoft Store,进入后搜索Magicpods。然后就可以点击下载。(软件的费用是12元,可以先免费试用) 有可能会出现:下载任何微软商店应用程序都显示错误代码: 0x80240438 解决方法&#xf…

基于HTML+CSS+JS制作商城(web前端网页制作课作业)---手机主题 7页

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 在线商城购物 | 水果商城 | 商城系统建设 | 多平台移动商城 | H5微商城购物商城项目 | HTML期末大学生网页设计作业 HTML:结构 CSS&#…

ER图到关系模型的转换和练习SQL语言

目录 一、实验要求 二、作业1解答 1.ER图 2.关系模型: 三、作业2解答 1. 建表并插入数据 2. 使用查询语句查询相关信息 查询计算机系男生的信息: 查询鹿晗的年龄 查询姓名第二个字为“丽”的同学的信息 按照性别列出男…

跨境人,是继续坚守还是求新变新?(Starday)

与以往相比,跨境电商行业圈有许多让卖家难以想象的负面新闻,从亚马逊封号潮、海运价格暴涨、服务商跑路、跨境电商公司倒闭等新闻常有耳闻,今年黑五等销售季的单量也让人不忍直视,许多跨境人战战兢兢,心中非常焦虑。如…

ANSYS mechanical如何在Workbench环境中使用高性能计算

ANSYS mechanical属于隐式结构有限元分析求解器,一般完成一个有限元分析过程需要前处理、求解和后处理三个步骤。前处理一般在图形工作站上完成,有限元求解可在工作站、集群及SMP 服务器上进行。 对于中小型问题(例如1000 万节点以内的ANSYS…

基于Webrtc的视频通话录制功能-Android实现

基于Webrtc的视频通话录制功能-Android实现 webrtc本身并不支持视频通话的录制。 webrtc的sdk只是暴露了视频数据给开发者,而音频数据并没有向外暴露。 因此如果要进行视频通话的录制,需要修改webrtc的sdk,将音频数据暴露出来。 webrtc的下载…

【OpenCV-Python】教程:3-9 轮廓(4)更多函数

OpenCV Python 轮廓 【目标】 凸性缺陷查找点与多边形的关系不同形状的匹配 【代码】 左图中红色点为凸性检测的缺陷点,即凹点 右图为了验证点与多边形关系而做的图,也是官网要求做的练习。 import cv2 import numpy as np img cv2.imread(star.png…

契约锁电子签助力拍卖业务网上签约,保全证据、不可抵赖,成交快

近年,二手车、房产、股权、数字藏品以及法律诉讼资产的拍卖,逐步从线下向线上转型。电子签章技术的应用,解决了委托拍卖合同、竞买合同以及成交确认书等文件线上签署难题,帮助拍卖机构建立全程数字化的“网上拍卖”渠道&#xff0…

Java本地搭建宝塔部署实战springboot智慧物业管理源码

大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套基于若依开发的springboot智慧物业管理系统的源码,系统是前后端分离的架构,前端使用Vue2,后端使用SpringBoot2。 技术架构 技术框架:SpringBoot…

5G工业互联网的“下半场”该拼什么?

据工信部11月21日最新发布的《2022年1-10月份通信业经济运行情况》显示,截止10月末,国内5G基站总数已达到225万个,占全球5G基站数比例超70%。截止今年8月末,国内已提前完成全年建成200万个5G基站的目标。中国在5G网络建设、终端普…

Echarts-实现3D柱状图显示,并单个柱子变色

如下&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>模拟3D柱状图渐变色柱子</title><scripttype"text/javascript"src"https://cdn.jsdelivr.net/npm/echarts5/dist/echarts.min.…

java每一练(3)

java每日一练(3) 单选部分 &#xff1a; 1.以下代码运行输出的是 public class Person{private String name "Person";int age0; }class Child extends Person{public String grade;public static void main(String[] args){Person p new Child();System.out.pri…

JavaWeb之Maven学习

目录Maven 简介仓库的分类Maven 坐标Maven 常用命令Maven 生命周期依赖管理删除Maven 项目导入项目最后Maven 简介 Maven的作用&#xff1a; Maven是专门用于管理和构建Java项目的工具 它的主要功能有&#xff1a; 提供了一套标准化的项目结构 提供了一套标准化的构建流程…

sqli-labs/Less-60

这一关还是一如既往的5次机会 一如既往的是以id作为注入点的 我们还是按照先前的做法第一轮先去获取一下注入类型以及决定下一轮要使用的注入方法 第二轮在进行各种爆破操作 首先输入id1 and 12判断注入类型是否属于数字型 回显如下 属于字符型 然后输入1 回显如下 说明不属于…

看世界杯效应下的中东市场,开发攻略来了

卡塔尔世界杯正如火如荼开展中&#xff0c;作为首次在中东地区举办的世界杯&#xff0c;它吸引了全世界目光的同时&#xff0c;也带来了一大波消费和需求。 先看一则新闻&#xff0c;在11月22日晚&#xff0c;沙特队在卡塔尔世界杯首战上演惊天大逆转&#xff0c;以2比1击败夺…

深入浅出DDD编程

作者 | 刘嘿嘿、离夏、立羽 导读 最近几年&#xff0c;微服务拆分大行其道&#xff0c;在业务越来越复杂的情况下&#xff0c;许多业务纷纷抛弃了传统单体架构&#xff0c;拥抱微服务。但随着微服务的拆分结束&#xff0c;大家又发现了新的问题&#xff0c;比如服务间逻辑复杂&…

计算机毕业设计之java+ssm峰值预警停车场管理系统

项目介绍 随着城市建设与经济的不断发展,城市车辆的数量也不断增涨,为解决停车问题修建停车场。基于经营、安全、管理等多角度的考虑&#xff0c;希望在目前传统的大型车库管理系统中有机地结合车牌识别技术&#xff0c;以求得日后在停车库运营时更安全、管理上更细致、经营中…

SuperMap 云原生常见问题解决办法-keycloak启动异常

有些客户在使用iManager for K8S 云套件的产品的时候&#xff0c;偶尔会遇到机器异常重启的情况&#xff0c;比如说服务器断电&#xff0c;重启后可能会出现云套件启动异常的情况&#xff0c;比如说keycloak启动不了&#xff0c;一直抛出异常导致服务无法正常使用。本篇文章就结…

MongoDB故障转移案例详细操作

MOngoDB故障转移 文章目录MOngoDB故障转移1.数据库提权操作1.1.使用命令查询主库信息1.2.给db02升级权重1.3.修改完成后进行加载配置1.4.主库执行降级操作2.恢复主库权限2.1.先给库权重降低2.2.执行降级命令2.3.恢复成功MongoDB的主从目前是我们在配置副本集的时候设置但是如果…