模拟时钟示例 Analog Clock Example

举报
黑兔子 发表于 2022/09/15 13:35:50 2022/09/15
【摘要】 该示例实现了一个只有时针和分针组成的展示当前时间的时钟。随着系统时间的改变,时钟会每隔几秒更新一次。 这个例子演示了如何使用QPainter的转换和缩放功让行绘制操作变得更容易。 这个示例在对我们入门学习使用QPainter进行绘制非常有帮助。

示例运行效果:

image.png

该示例实现了一个只有时针和分针组成的展示当前时间的时钟。随着系统时间的改变,时钟会每隔几秒更新一次。
这个例子演示了如何使用QPainter的转换和缩放功让行绘制操作变得更容易。
这个示例在对我们入门学习使用QPainter进行绘制非常有帮助。

文件目录:

image.png

这个示例只有一个main文件和一个实现时钟的AnalogClock类的.cpp和.h文件。

具体实现:

main函数:

image.png

直接创建时钟窗口并显示出来。

AnalogClock类:

image.png

AnalogClock类中只包含了一个构造函数和一个painEvent事件的响应函数。所有绘制工作都在painEvent()函数中完成。

构造函数:

image.png

构造函数中创建了一个定时器,定时器的间隔是1s钟,每隔一秒调一下update()函数刷新页面。
构造函数中还设置了窗体的标题和大小。

paintEvent函数:

image.png

详解:
在设置QPainter并绘制时钟之前,首先定义了两个QPoints数组和两个QColor,它们将用于时针和分针的绘制。分针的颜色是带有透明度的。
获取窗体小部件最短边的长度,可以使在绘制时钟面板时可以全部显示出来。
然后获取到当前时间。

调用QPainter::setRenderHint()与QPainter::Antialiasing打开抗锯齿。这样斜线的绘制会更加流畅。

调用translate函数将原点移动到窗体的中心。
调用scale函数缩放坐标系,以确保将绘图操作缩放到适合大小,并且在缩放窗体时,时钟可以随着窗体大小的变化而变化。

QPainter负责在绘制事件期间进行的所有转换,并确保一切都被正确绘制。让QPainter处理转换通常比仅仅绘制自定义小部件的内容而执行手动计算更方便。
先画时针,使用一个公式,该公式将坐标系统逆时针旋转若干度,旋转度由当前的小时和分钟决定。

save和restore可以保证在绘制其他单元时,不受之前的影响。

绘制小时的刻度,一共12个。
绘制分针,同样使用公式计算出旋转的角度。
最后绘制分针的刻度。

drawConvexPolygon: 通过给定点数绘制多边形。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。