Qt 示例 | 模拟时钟示例 Analog Clock Example
示例运行效果:
该示例实现了一个只有时针和分针组成的展示当前时间的时钟。随着系统时间的改变,时钟会每隔几秒更新一次。
这个例子演示了如何使用 QPainter 的转换和缩放功让行绘制操作变得更容易。
这个示例在对我们入门学习使用 QPainter 进行绘制非常有帮助。
文件目录:
这个示例只有一个 main 文件和一个实现时钟的 AnalogClock 类的.cpp 和.h 文件。
具体实现:
main 函数:
直接创建时钟窗口并显示出来。
AnalogClock 类:
AnalogClock 类中只包含了一个构造函数和一个 painEvent 事件的响应函数。所有绘制工作都在 painEvent()函数中完成。
构造函数:
构造函数中创建了一个定时器,定时器的间隔是 1s 钟,每隔一秒调一下 update()函数刷新页面。
构造函数中还设置了窗体的标题和大小。
paintEvent 函数:
在设置 QPainter 并绘制时钟之前,首先定义了两个 QPoints 数组和两个 QColor,它们将用于时针和分针的绘制。分针的颜色是带有透明度的。
获取窗体小部件最短边的长度,可以使在绘制时钟面板时可以全部显示出来。
获取当前时间。
调用 QPainter::setRenderHint()与 QPainter::Antialiasing 打开抗锯齿。这样斜线的绘制会更加流畅。
调用 translate 函数将原点移动到窗体的中心。
调用 scale 函数缩放坐标系,以确保将绘图操作缩放到适合大小,并且在缩放窗体时,时钟可以随着窗体大小的变化而变化。
QPainter 负责在绘制事件期间进行的所有转换,并确保一切都被正确绘制。让 QPainter 处理转换通常比仅仅绘制自定义小部件的内容而执行手动计算更方便。
先画时针,使用一个公式,该公式将坐标系统逆时针旋转若干度,旋转度由当前的小时和分钟决定。
save 和 restore 可以保证在绘制其他单元时,不受之前的影响。
绘制小时的刻度,一共 12 个。
绘制分针,同样使用公式计算出旋转的角度。
最后绘制分针的刻度。
drawConvexPolygon: 通过给定点数绘制多边形。
版权声明: 本文为 InfoQ 作者【YOLO.】的原创文章。
原文链接:【http://xie.infoq.cn/article/4e097b6162004feab47d88bce】。未经作者许可,禁止转载。
评论