Qt5官方demo解析集34——Concentric Circles Example

2024-06-06 00:32

本文主要是介绍Qt5官方demo解析集34——Concentric Circles Example,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本系列所有文章可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873

接上文Qt5官方demo解析集33——Qt Quick Examples - Window and Screen


好像有一段时间没有更新这个系列了,一方面是很多的事掺杂着一起来了,稍微比原来忙了一些;但时间哪有挤不出来的呢,所以更重要的一个原因其实是很难找到一个特别合适的Demo来做这个主题。有的Demo内容很偏很少项目在做,有的Demo又过于基础,我总希望能挑出一些大家经常能接触得到又需要了解的知识点~


因为Qt的每一个官方Demo都有一个关注的点,每次把所有的代码都贴出来可能这个系列的重复部分会越来越多。。。所以从本文开始,我们只把关键代码挑出来浓墨重彩地介绍一下(*^__^*) 


好了,废话少说,进入今天的正题吧:Concentric Circles Example

大家都知道在Qt里面绘制一个椭圆可以在paintEvent()中使用

painter.drawEllipse(QRect(-diameter / 2, -diameter / 2, diameter, diameter));

那么我们这样绘制多个同心圆的效果大概像下面这样:

(在放大镜效果下对Demo运行效果的截图)


首先让我们将这及其不圆润的边缘放在一边,细心的你可能会发现,这些同心圆总是两两之间挨得特别近,而我们明明是绘制的等距的同心圆?其实答案很简单,它就是对整型坐标值进行计算后四舍五入得到的结果。知道问题的来源后,解决起来就容易了。

Qt很贴心地为我们提供了另一个接受QRectF()参数的drawEllipse():

painter.drawEllipse(QRectF(-diameter / 2.0, -diameter / 2.0, diameter, diameter));


看看有没有好一点?一方面我们确实得到了等距的同心圆,另一方面也显得圆润了些,上图中那么显眼的直线也没那么长了。


如果想要进一步得到更加圆润的圆,我们可以设置painter的抗锯齿效果QPainter::Antialiasing,简单点说它是通过采样算法将在图形边缘会造成锯齿的像素与周围的像素作一个平均的运算,并增加像素的数目,这样来形成区域像素点的平滑过渡的效果。不过,这样做的副作用是图像会显得有些模糊。


drawEllipse(QRect()) + 抗锯齿:

painter.setRenderHint(QPainter::Antialiasing);
painter.drawEllipse(QRect(-diameter / 2, -diameter / 2, diameter, diameter));


drawEllipse(QRectF()) + 抗锯齿:

painter.setRenderHint(QPainter::Antialiasing);
painter.drawEllipse(QRectF(-diameter / 2.0, -diameter / 2.0, diameter, diameter));



最后我们还是看下整个程序的界面吧:



这篇关于Qt5官方demo解析集34——Concentric Circles Example的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1034612

相关文章

解析 XML 和 INI

XML 1.TinyXML库 TinyXML是一个C++的XML解析库  使用介绍: https://www.cnblogs.com/mythou/archive/2011/11/27/2265169.html    使用的时候,只要把 tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上,或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景: 表单处理:通过 @ModelAttribute 将表单数据绑定到模型对象上预处理逻辑:在请求处理之前

tf.split()函数解析

API原型(TensorFlow 1.8.0): tf.split(     value,     num_or_size_splits,     axis=0,     num=None,     name='split' ) 这个函数是用来切割张量的。输入切割的张量和参数,返回切割的结果。  value传入的就是需要切割的张量。  这个函数有两种切割的方式: 以三个维度的张量为例,比如说一

陀螺仪LSM6DSV16X与AI集成(8)----MotionFX库解析空间坐标

陀螺仪LSM6DSV16X与AI集成.8--MotionFX库解析空间坐标 概述视频教学样品申请源码下载开启CRC串口设置开启X-CUBE-MEMS1设置加速度和角速度量程速率选择设置FIFO速率设置FIFO时间戳批处理速率配置过滤链初始化定义MotionFX文件卡尔曼滤波算法主程序执行流程lsm6dsv16x_motion_fx_determin欧拉角简介演示 概述 本文将探讨

【文末附gpt升级秘笈】腾讯元宝AI搜索解析能力升级:千万字超长文处理的新里程碑

腾讯元宝AI搜索解析能力升级:千万字超长文处理的新里程碑 一、引言 随着人工智能技术的飞速发展,自然语言处理(NLP)和机器学习(ML)在各行各业的应用日益广泛。其中,AI搜索解析能力作为信息检索和知识抽取的核心技术,受到了广泛的关注和研究。腾讯作为互联网行业的领军企业,其在AI领域的探索和创新一直走在前列。近日,腾讯旗下的AI大模型应用——腾讯元宝,迎来了1.1.7版本的升级,新版本在AI搜

消息认证码解析

1. 什么是消息认证码         消息认证码(Message Authentication Code)是一种确认完整性并进行认证的技术,取三个单词的首字母,简称为MAC。         消息认证码的输入包括任意长度的消息和一个发送者与接收者之间共享的密钥,它可以输出固定长度的数据,这个数据称为MAC值。         根据任意长度的消息输出固定长度的数据,这一点和单向散列函数很类似

问题1,PE文件转到内存中出现解析PE不正确的问题

1,使用fopen(FileName, “r”) r的方式读取文件到内存,此时就可能存在问题了,r以只读方式,有时候不表示字符的有可能就不读了,那么内存中就不会是完整的原始文件。所以此时要采用rb,二进制读取的方式。 bool ReadFileToMem(char* FileName, char**buf) { FILE* f; f = fopen(FileName, “rb”); if

[大师C语言(第三十六篇)]C语言信号处理:深入解析与实战

引言 在计算机科学中,信号是一种软件中断,它允许进程之间或进程与内核之间进行通信。信号处理是操作系统中的一个重要概念,它允许程序对各种事件做出响应,例如用户中断、硬件异常和系统调用。C语言作为一门接近硬件的编程语言,提供了强大的信号处理能力。本文将深入探讨C语言信号处理的技术和方法,帮助读者掌握C语言处理信号的高级技巧。 第一部分:C语言信号处理基础 1.1 信号的概念 在Unix-lik

免费内网穿透工具 ,快解析内网穿透解决方案

在IPv4公网IP严重不足的环境下,内网穿透技术越来越多的被人们所使用,使用内网穿透技术的好处有很多。 1:无需公网ip 物以稀为贵,由于可用的公网IP地址越来越少,价格也是水涨船高,一个固定公网IP一年的成本要上万,而使用内网穿透技术则不需要公网IP的支持。 2:提高安全性 使用内网穿透技术,无需在路由器映射端口,我们知道黑客通常会使用端口扫描来寻找攻击对象,不映射端口能大大提高服务器的安全

混合密码系统解析

1. 概述         混合密码系统(hybrid cryptosystem)是将对称密码和非对称密码的优势相结合的方法。一般情况下,将两种不同的方式相结合的做法就称为混合(hybrid)。用混合动力汽车来类比的话,就相当于是一种将发动机(对称密码)和电动机(非对称密码)相结合的系统。         混合密码系统中会先用快速的对称密码来对消息进行加密,这样消息就被转换为了密文从而也就保证