用Qt完成时钟
头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTimer>
#include <QDateTime>
#include <QPainter>
#include <QPaintEvent>
#include <QDebug>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
//重写绘制事件处理函数
void paintEvent(QPaintEvent *event) override;
private:
Ui::Widget *ui;
QTimer *timer; //定义定时器类指针
int hour; //定义小时变量
int minute; //定义分钟变量
int second; //定义秒钟变量
};
#endif // WIDGET_H
源文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//给定时器类指针实例化对象
timer = new QTimer(this);
timer->start(1000);
connect(timer,&QTimer::timeout,[&](){
update();
});
}
Widget::~Widget()
{
delete ui;
}
//绘画事件定义
void Widget::paintEvent(QPaintEvent *event){
//获取时间
QDateTime time = QDateTime::currentDateTime();
//将时间转化成字符串
QString t = time.toString("HH:mm:ss");
//分离时间
QStringList timelist = t.split(':');
hour = timelist[0].toUInt();
minute = timelist[1].toUInt();
second = timelist[2].toUInt();
//定义一个画家类对象
QPainter p(this);
//给画家准备画笔
p.setPen(QPen(Qt::black,3));
//定义一把刷子类对象 给画家一把刷子
QBrush b(QColor("white"));
p.setBrush(b);
//移动画家的起始坐标
p.translate(this->width()/2,this->height()/2);
//画圆
p.drawEllipse(QPoint(0,0),200,200);
//画时钟刻度
int j = 12;
for(int i=0;i<60;i++){
p.setPen(QPen(Qt::black,2));
p.drawLine(QPoint(0,200),QPoint(0,195));
if(i%5==0){
p.setPen(QPen(Qt::black,3));
p.drawLine(QPoint(0,200),QPoint(0,190));
p.drawText(QPoint(-3,-175),QString::number(j));
if(j>=12){
j=0;
}
j++;
}
p.rotate(6);
}
//时针
p.setPen(QPen(Qt::red,10));
p.rotate(hour*30+minute*0.5+second*0.0083);
p.drawLine(QPoint(0,-50),QPoint(0,5));
p.rotate(-(hour*30+minute*0.5+second*0.0083));
//分针
p.setPen(QPen(Qt::green,7));
p.rotate(minute*6+second*0.1);
p.drawLine(QPoint(0,-100),QPoint(0,5));
p.rotate(-(minute*6+second*0.1));
//秒针
p.setPen(QPen(Qt::blue,4));
p.rotate(second*6);
p.drawLine(QPoint(0,-150),QPoint(0,5));
qDebug() << hour << ":" << minute << ":" << second;
}
主调函数
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
运行结果