头文件
#ifndef ALARMCLOCK_H
#define ALARMCLOCK_H
#include <QWidget>
#include <QTimer>
#include <QDebug>
#include <QTime>
#include <QTimerEvent>
#include <QDateTime>
#include <QMouseEvent>
QT_BEGIN_NAMESPACE
namespace Ui { class AlarmClock; }
QT_END_NAMESPACE
class AlarmClock : public QWidget
{
Q_OBJECT
public:
AlarmClock(QWidget *parent = nullptr);
~AlarmClock();
void timerEvent(QTimerEvent *event) override;
private slots:
void on_Start_clicked();
void mousePressEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
void on_Stop_clicked();
private:
Ui::AlarmClock *ui;
///定义一个整型变量,存放定时器id
int t_id;
QPoint startPoint;
};
#endif // ALARMCLOCK_H
源文件
#include "alarmclock.h"
#include "ui_alarmclock.h"
AlarmClock::AlarmClock(QWidget *parent)
: QWidget(parent)
, ui(new Ui::AlarmClock)
{
ui->setupUi(this);
ui->AlarmTime->setText("19:18:00");
ui->NowTime->setAlignment(Qt::AlignCenter);
ui->AlarmTime->setAlignment(Qt::AlignCenter);
ui->Stop->setDisabled(true);
}
AlarmClock::~AlarmClock()
{
delete ui;
}
void AlarmClock::on_Start_clicked()
{
t_id = this->startTimer(1000);
ui->Start->setDisabled(true);
ui->Stop->setDisabled(false);
}
//重写定时器事件处理函数
void AlarmClock::timerEvent(QTimerEvent *event)
{
//event表示已经超时的定时器
//可以使用event的成员函数timerId()来获取已经到位的定时器标识符
if(event->timerId() == t_id){
QDateTime sysDate = QDateTime::currentDateTime();
QString date = sysDate.toString("hh:mm:ss");
ui->NowTime->setText(date);
}
if(ui->NowTime->text() >= ui->AlarmTime->text()){
ui->Message->setText("时间到啦!!!");
}
}
void AlarmClock::on_Stop_clicked()
{
//执行关闭逻辑
this->killTimer(t_id);
ui->Stop->setDisabled(true);
ui->Start->setDisabled(false);
}
void AlarmClock::mousePressEvent(QMouseEvent *event)
{
startPoint = event->globalPos() - this->frameGeometry().topLeft();
}
void AlarmClock::mouseMoveEvent(QMouseEvent *event)
{
this->move(event->globalPos() - startPoint);
}