一、钟表实现原理
钟表的实现需要设置定时器,定时器每隔一秒发送timeout()信号到QWidget::update()槽函数,update()槽函数将会重绘一次窗口,重写重绘事件函数paintEvent(QPaintEvent *event),根据获取的当前系统时间的时钟、分钟、秒钟重绘钟表的时针、分针、秒针。
QTimer *timer = new QTimer(this);
timer->start(1000);//一秒钟
connect(timer,SIGNAL(timeout()),this,SLOT(update()));
setWindowTitle("The Clock");
二、钟表的界面绘制
钟表由时针、分针、秒针、刻度盘组成,绘制时针、分针、秒针、刻度盘刻度线需要翻转坐标系,因此在绘制前需要先保存当前的坐标系状态,对坐标系进行翻转需要的角度后绘制图形,绘制完成后需要恢复坐标系的状态。
1、时针绘制
确定组成时针的四个点,使用drawConvexPolygon函数绘制出四边形时针。
const QPoint Clock::hourHand[4] = {
QPoint(3, 5),
QPoint(0, 13),
QPoint(-3, 5),
QPoint(0, -40)
};
QPainter painter(this);
painter.setBrush(Qt::black);
painter.setPen(Qt::black);
painter.drawConvexPolygon(hourHand,4);//绘制时针
2、分针绘制
确定组成分针的四个点,使用drawConvexPolygon函数绘制出四边形分针。
const QPoint Clock::minuteHand[4] = {
QPoint(3, 5),
QPoint(0, 16),
QPoint(-3, 5),
QPoint(0, -70)
};
QPainter painter(this);
painter.setBrush(Qt::black);
painter.setPen(Qt::black);
pa