demo链接:https://download.csdn.net/download/weixin_39841821/10568854
一、 需求
a) 画出一个圆形表盘,包含三角形的时针、分针、秒针,以及上方的刻度,加上名字
b) 在窗体发生变化的时候,时钟能够根据窗体大小自动调整
c) 时间能够显示当前时间
二、 实现:通过在.h重声明void paintEvent(QPaintEvent ) 和类中重写void Widget::paintEvent(QPaintEvent )
a) 利用QPainter类中的:
1) translate(int x,int y)把中心点作为(0,0)
2) scale(int x,inty)设置缩放比例 //这样就会随着窗口变化Painter画出的图像也发生变化
3) drawEllipse(int,int,int,int)设置起点坐标和长轴和短轴
4) drawConvexPolygon(QPoint[],int)
5) setPen(pen)定义线段类型
6) setBrush(QColor)定义填充颜色
利用QPoint定义3个3点坐标,再通过drawConvexPolygon划出不规则多边形既三角形
通过drawLine画出最右方的直线,通过rotate每旋转30°画一次,画12次,形成短刻度
通过drawLine画出最右方的直线,通过rotate每旋转6°画一次,画60次,形成长刻度
b) 把画的方法都写scale下方,那么每一次窗口变化都会记录上一次情况,然后按照比例缩放
c)通过定义时钟中断,Timer t.start(1000), 然后连接信号timerout() 和 update() , 然后每一次中断都会重绘一 次时钟界面
计算时钟应该再的角度:
时钟每个小时旋转30°,每分钟旋转30/60°
分针每分钟旋转6°,每小时旋转6/30°
秒钟每秒钟旋转6°
三、 界面效果
Ps:在绘制过程中注意使用save()和restore()保持和恢复画笔状态,旋转和平移时对画笔而言的,定义的是画笔的原点点。