头文件:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTimerEvent>
#include <QTimer>
#include <QTime>
#include<QTextToSpeech> //语言播报类
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void timerEvent(QTimerEvent *e); //重写定时器事件函数
//创建一个语言播报者
QTextToSpeech *speecher;
private slots:
void on_pushButton_clicked();
private:
Ui::Widget *ui;
int id; //定义定时器id
int id2; //
QString alarm_time; //记录设置的闹钟时间
QString system_time;//记录系统时间
};
#endif // WIDGET_H
源文件:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//启动一个定时器显示系统当前时间
id= startTimer(100);
//给语音播报者实例化空间
speecher = new QTextToSpeech(this);
}
Widget::~Widget()
{
delete ui;
}
//当定时器超时后自动执行的函数
void Widget::timerEvent(QTimerEvent *e)
{
//判断是哪个定时器超时
if(e->timerId()==id) //显示系统时间定时器超时
{
//获取当前系统时间
QTime sys_time= QTime::currentTime();
//将时间类型转换为字符串
QString time = sys_time.toString("hh:mm:ss");
//将时间放入标签
ui->system_time_label->setText(time);
system_time = sys_time.toString("hh:mm"); //记录系统时间
}
if(e->timerId()==id2) //闹钟定时器超时
{
if(system_time==alarm_time){ //闹钟时间等于系统时间
killTimer(id2); //关闭定时器
//播报三次
speecher->say(ui->say_label->text());
speecher->say(ui->say_label->text());
speecher->say(ui->say_label->text());
}
}
}
//启动按钮对应的槽函数处理
void Widget::on_pushButton_clicked()
{
if(ui->pushButton->text()=="启动")
{
id2= startTimer(1000); //启动闹钟定时器
if(ui->lineEdit->text()=="")
{
ui->label_2->setText("未设置闹钟");
}else{
//文本改为“关闭”
ui->pushButton->setText("关闭");
alarm_time = ui->lineEdit->text(); //记录闹钟时间
ui->label_2->setText("当前闹钟设置为:"+ui->lineEdit->text());
}
}
else
{
//文本改为“启动”
ui->pushButton->setText("启动");
ui->label_2->setText("");
alarm_time = ""; //取消闹钟时间
}
}