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));



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



为了使更多的Qt初学者能尽快入门Qt,也为了QtQt Creator的快速普及,我们花费大量精力写出了这一系列教程。虽然教程的知识可能很浅显,虽然教程的语言可能不规范,但是它却被数十万网友所认可。我们会将这一系列教程一直写下去,它将涉及Qt的方方面面 一、Qt Creator的安装和hello world程序的编写 二、Qt Creator编写多窗口程序 三、Qt Creator登录对话框 四、Qt Creator添加菜单图标 五、Qt Creator布局管理器的使用 六、Qt Creator实现文本编辑 七、Qt Creator实现文本查找 八、Qt Creator实现状态栏显示 九、Qt Creator中鼠标键盘事件的处理实现自定义鼠标指针 十、Qt Creator中实现定时器和产生随机数 十一、Qt 2D绘图(一)绘制简单图形 十二、Qt 2D绘图(二)渐变填充 十三、Qt 2D绘图(三)绘制文字 十四、Qt 2D绘图(四)绘制路径 十五、Qt 2D绘图(五)显示图片 十六、Qt 2D绘图(六)坐标系统 十七、Qt 2D绘图(七)Qt坐标系统深入 十八、Qt 2D绘图(八)涂鸦板 十九、Qt 2D绘图(九)双缓冲绘图简介 二十、Qt 2D绘图(十)图形视图框架简介 二十一、Qt数据库(一)简介 二十二、Qt数据库(二)添加MySQL数据库驱动插件 二十三、Qt数据库(三)利用QSqlQuery类执行SQL语句(一) 二十四、Qt数据库(四)利用QSqlQuery类执行SQL语句(二) 二十五、Qt数据库(五)QSqlQueryModel 二十六、Qt数据库(六)QSqlTableModel 二十七、Qt数据库(七)QSqlRelationalTableModel 二十八、Qt数据库(八)XML(一) 二十九、Qt数据库(九)XML(二) 三十、Qt数据库(十)XML(三) 三十一、Qt 4.7.0及Qt Creator 2.0 beta版安装全程图解 三十二、第一个Qt Quick程序(QML程序) 三十三、体验QML演示程序 三十四、Qt Quick Designer介绍 三十五、QML组件 三十六、QML项目之Image和BorderImage 三十七、Flipable、Flickable和状态与动画 三十八、QML视图 三十九、QtDeclarative模块 四十、使用Nokia Qt SDK开发Symbian和Maemo终端软件 四十一、Qt网络(一)简介 四十二、Qt网络(二)HTTP编程 四十三、Qt网络(三)FTP(一) 四十四、Qt网络(四)FTP(二) 四十五、Qt网络(五)获取本机网络信息 四十六、Qt网络(六)UDP 四十七、Qt网络(七)TCP(一) 四十八、Qt网络(八)TCP(二)
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值