QT(QPainter画圆弧)

news2024/11/18 3:19:09

文章目录

  • 前言
  • 一、QPainter画圆弧方法
  • 二、使用示例
  • 三、画一个彩色环
  • 总结


前言

本篇文章给大家介绍一下如何使用QPainter来画圆弧。

一、QPainter画圆弧方法

drawArc() 函数是 Qt 绘图类库中的一个函数,用于在画布上绘制圆弧。可以通过设置起点角度和圆弧弧度来控制圆弧的绘制效果。

函数原型如下:

void QPainter::drawArc(int x, int y, int width, int height, int startAngle, int spanAngle);

其中,参数 x 和 y 指定圆弧所在矩形的左上角坐标,参数 width 和 height 分别指定圆弧所在矩形的宽度和高度。参数 startAngle 指定圆弧的起始角度,单位为度,范围是从 0 到 360。参数 spanAngle 指定圆弧的弧度,也是以度为单位的,范围是负数表示逆时针旋转,正数表示顺时针旋转。

需要注意的是,Qt 中的角度单位是以 1/16 度为单位的,因此在设置起始角度和弧度时需要将角度值乘以 16。

二、使用示例

这里画了一个起始角度为0,圆弧弧度为150的圆弧。

void Widget::paintEvent(QPaintEvent* event)
{
    QPainter painter(this);
    QPen pen;
    pen.setColor(Qt::green);
    painter.setPen(pen);

    painter.translate(width() / 2, height() / 2);

    QRect rect(-height() / 4, -height() / 4, height() / 2, height() / 2);

    painter.drawArc(rect, 0 * 16, 150 * 16);
}

效果:
在这里插入图片描述
同样的起始角度和旋转角度也可以指定负数角度值:
在QT中角度是如下分布的:
在这里插入图片描述
当 spanAngle > 0 时,表示顺时针旋转;当 spanAngle < 0 时,表示逆时针旋转。spanAngle 的单位同样是 角度(degree),其取值范围不受任何限制。

画一个圆:
使用画圆弧的方法画一个圆形还是非常简单的,只需要起始角度和旋转角度之间相差360°即可。

    QPainter painter(this);
    QPen pen;
    pen.setColor(Qt::green);
    painter.setPen(pen);

    painter.translate(width() / 2, height() / 2);

    QRect rect(-height() / 4, -height() / 4, height() / 2, height() / 2);

    painter.drawArc(rect, 0 * 16, 360 * 16);

效果:
在这里插入图片描述

三、画一个彩色环

首先我们先来绘制一个外环:
笔的大小设置为20。

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    QPen pen;
    pen.setColor(Qt::green);
    pen.setWidth(20);
    painter.setPen(pen);

    painter.translate(width() / 2, height() / 2);

    QRect rect(-height() / 4, -height() / 4, height() / 2, height() / 2);

    painter.drawArc(rect, 0 * 16, 360 * 16);

效果:

在这里插入图片描述
笔的大小设置为20后外面和里面的间隔各自占了10:
在这里插入图片描述
画出一个圆环后面的就不难了:

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    QPen pen;
    pen.setColor(Qt::green);
    pen.setWidth(20);
    painter.setPen(pen);

    painter.translate(width() / 2, height() / 2);

    QRect rect(-height() / 4, -height() / 4, height() / 2, height() / 2);
    painter.drawArc(rect, 0 * 16, 360 * 16);

    pen.setColor(Qt::red);
    painter.setPen(pen);
    QRect rect1(-height() / 4 + 20, -height() / 4 + 20, height() / 2 - 40, height() / 2 - 40);
    painter.drawArc(rect1, 0 * 16, 360 * 16);

    pen.setColor(Qt::blue);
    painter.setPen(pen);
    QRect rect2(-height() / 4 + 40, -height() / 4 + 40, height() / 2 - 80, height() / 2 - 80);
    painter.drawArc(rect2, 0 * 16, 360 * 16);

运行效果:

这样我们就实现了彩色环了:
在这里插入图片描述

总结

QPainter画圆弧进行画圆弧时要注意的就是起始角度和旋转的角度。希望大家多多支持,后续将带来更多QPainter的用法。

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

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

相关文章

Keil_C51之Memory_mode解析

有时我们会遇到这样的报错&#xff1a; *** ERROR L107: ADDRESS SPACE OVERFLOW SPACE: DATA SEGMENT: _DATA_GROUP_ LENGTH: 002CH Program Size: data117.0 xdata0 code6242 Target not created. Build Time Elapsed: 00:00:00 报错截图如下&#xff1a; 这类报…

程序员怎么玩转Linux

Linux下可以使用Python编写爬虫程序&#xff0c;常用的爬虫框架有Scrapy和BeautifulSoup。 Scrapy是一个基于Python的开源网络爬虫框架&#xff0c;可以快速高效地从网站上获取数据。它提供了强大的数据提取和处理功能&#xff0c;支持异步网络请求和分布式爬取等特性。 Beau…

九耶丨阁瑞钛伦特-springmvc(五)

Spring是最流行的企业级开发框架之一&#xff0c;它提供了一套完整的IOC&#xff08;控制反转&#xff09;和AOP&#xff08;面向切面编程&#xff09;解决方案&#xff0c;可以帮助软件开发人员快速开发出高效、可扩展的应用程序。Spring MVC是Spring框架中的一个模块&#xf…

cesium模型在前端页面加载后亮度异常的处理

一.问题产生与分析 通常情况下&#xff0c;后端生成的模型数据&#xff0c;以默认参数加载在前端页面时亮度能显示是正常的&#xff0c;如果不正常&#xff0c;猜测可能与生成的原数据有关&#xff08;数据本身在前端页面加载亮度就低&#xff09; 二.问题解决 前端页面针对这…

OpenHarmony 3.2 Release新特性解读之驱动HCS

OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;开源社区&#xff0c;在今年4月正式发布了OpenHarmony 3.2 Release版本&#xff0c;标准系统能力进一步完善&#xff0c;提升了系统的整体性能、稳定性和安全性。此次版本对于驱动也提供了一些新的特性&am…

ELK高可用集群添加用户名密码认证

确定主节点 GET _cat/nodes?v带*的就是主节点&#xff0c;这里是zcpt-prd-ELK-01节点 生成根证书elastic-stack-ca.p12&#xff08;进入主节点&#xff09; 注意操作es7.7.0使用es用户 su es进入主节点的bin目录下执行 ./elasticsearch-certutil ca会要求输入密码直接回车…

Structural Deep Clustering Network

Structural Deep Clustering Network | Proceedings of The Web Conference 2020 (acm.org) 目录 Abstract 1 Introduction 2 Model 2.1 KNN Graph 2.2 DNN Module 2.3 GCN Module 2.4 Dual Self-Supervised Module Abstract 深度聚类方法通常是通过深度学习强大的表示…

为什么很多人做项目经理多年都没有进步?

为什么很多人做项目经理多年都没有进步&#xff1f; 项目经理是一个需要不断学习和成长的职业。然而&#xff0c;很多人在做了多年的项目经理后却没有看到自己的进步。这是为什么呢&#xff1f;以下是一些可能的原因&#xff1a; 1. 缺乏自我反思和改进意识 有些人可能会在自…

Ceph架构组件及存储过程

1、存储基础 //单机存储设备 ●DAS&#xff08;直接附加存储&#xff0c;是直接接到计算机的主板总线上去的存储&#xff09; IDE、SATA、SCSI、SAS、USB 接口的磁盘 所谓接口就是一种存储设备驱动下的磁盘设备&#xff0c;提供块级别的存储 ●NAS&#xff08;网络附加存储&am…

喜讯!图扑荣获用友年度十佳产业融合生态伙伴称号

2023 年 4 月 20 日&#xff0c;由中华全国工商业联合会联合工业和信息化部、国务院国资委组织开展的 2023 年度“百场万企”大中小企业融通对接活动——智能制造 MES 产业融通对接会暨 2023 用友 BIP 技术大会 MES 生态创新专题论坛在用友产业园顺利召开。 用友年度生态合作伙…

港联证券|资金疯狂涌入AI,这一板块涨幅超90%!万亿巨头继续狂飙

国内外资金继续加码AI概念股。 当前&#xff0c;国内政策层面对于通用人工智能和算力中心的创新发展扶持政策不断推出&#xff0c;资本市场对于AI&#xff08;人工智能&#xff09;热情不断升温。在AI下游应用中&#xff0c;游戏板块成为最被看好的投资标的&#xff0c;资金流入…

正则表达式实现关键字高亮

使用正则表达式实现一个类似于navicat中sql编辑器功能&#xff0c;大致实现以下目标&#xff1a; 指定关键字高亮(eg. 红色)数字高亮(eg. 蓝色)引号内容高亮(eg.浅绿色) 实现效果如下&#xff1a; 下面直接上代码&#xff0c;具体解释见代码&#xff1a; <!DOCTYPE htm…

C语言参悟-分支和跳转

C语言参悟-分支跳转 一、概述二、判断条件三、if else 条件判断1. 单判断2. 条件“并联”3. 条件“串联” 四、switch case 条件判断1. “单刀” 开关2. “多刀”开关 一、概述 下面只是我的对于C语言的认识拙见&#xff0c;可以多多提出批评建议&#x1f604; 计算机的诞生很…

16JS07——数组

目标&#xff1a; 1、数组的概念 2、创建数组 3、获取数组中的元素 4、遍历数组 5、数组中新增元素 6、数组案例 一、数组的概念 数组是指一组数据的集合&#xff0c;其中的每个数据被称作元素&#xff0c;在数组中可以存放任意类型的元素。数组是一种将一组数据存储在单个变…

Flink从入门到精通之-12Flink CEP

Flink从入门到精通之-12Flink CEP 在 Flink 的学习过程中&#xff0c;从基本原理和核心层 DataStream API 到底层的处理函数、再到应用层的 Table API 和 SQL&#xff0c;我们已经掌握了 Flink 编程的各种手段&#xff0c;可以应对实际应用开发的各种需求了。 在大数据分析领域…

lecory 波形二进制文件头(.trc)定义

1.文件头&#xff0c;从0字节开始 byte[] lecroy_trc_header new byte[]{0x23,0x39,0x30,0x30,0x32,0x30,0x30,0x30,0x31,0x34,0x34,0x57,0x41,0x56,0x45,0x44,0x45,0x53,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4C,0x45,0x43,0x52,0x4F,0x59,0x5F,0x32,0x5F,0x33,0x…

【爬虫第四章】 爬虫工具介绍

预计更新一、 爬虫技术概述 1.1 什么是爬虫技术 1.2 爬虫技术的应用领域 1.3 爬虫技术的工作原理 二、 网络协议和HTTP协议 2.1 网络协议概述 2.2 HTTP协议介绍 2.3 HTTP请求和响应 三、 Python基础 3.1 Python语言概述 3.2 Python的基本数据类型 3.3 Python的流程控制语句 3…

Hack The Box - Crocodile关卡

TASK 1 任务 1 What Nmap scanning switch employs the use of default scripts during a scan? 哪个 Nmap 扫描开关在扫描期间使用默认脚本&#xff1f; -sCTASK 2 任务 2 What service version is found to be running on port 21? 发现端口 21 上运行的服务版本是什么&…

人员定位系统的功能及在不同领域的应用

人员定位系统是实时定位系统&#xff08;RTLS&#xff09;的一种&#xff0c;是用于跟踪人员位置的软硬件一体化系统。它使用无线通信技术和传感器来获取位置数据&#xff0c;并将其发送到监控中心或移动设备。它在多个领域使用&#xff0c;包括工业、医疗保健、军事、物流等。…

【网络】· 路由器中配置单臂路由和DHCP,VTP原理

目录 &#x1f349;单臂路由的工作原理 &#x1f95d;交换机配置 &#x1f95d;路由器配置 &#x1f349;路由器配置DHCP &#x1f95d;配置实例 &#x1f95d;路由器配置 &#x1f95d;验证 &#x1f349;VTP工作原理 &#x1f95d;VTP模式 &#x1f95d;VTP通告 &#x1f95d…