首先思路:
第一步,是要用QTimer,因为时钟是按每秒刷新,所以要创建一个一秒计时器来跟踪当前时间。
第二步,就是用QPainter来绘制时钟,包括时针、分针、秒针的位置(QPoint),形状(drawConvexPolygon)、颜色(QColor),表盘(小时线、分钟线 setPen()),中心(坐标系原点默认是在左上角,需平移至中心 translate)等
第三步,加上小时对应的文本(就是表盘上1-12小时),包括,获取文本区域(QRectF)、绘制文本(drawText)
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QPaintEvent>
#include<QPoint>
#include<QMouseEvent>
#include<QTimerEvent>
#include<QPainter>
#include<QEvent>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
protected:
void paintEvent(QPaintEvent *event);//重写绘图事件
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void timerEvent(QTimerEvent *event);
private slots:
void on_pushButton_clicked();
private:
Ui::Widget *ui;
QPoint start,end;
QColor color;
int timerId;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
#include<QPainter>
#include<QPen>
#include<QBrush>
#include<QColorDialog>
#include<QTime>
Widget::Widget(QWidget *parent) :
QWidget(parent),