1.头文件:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTime>//时间类
#include <QTimer>//时间事件类
#include <QTimerEvent>//定时器类
#include <QTextToSpeech>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
void timerEvent(QTimerEvent *e) override;//重新声明
private slots:
void on_pushButton_clicked();
private:
Ui::Widget *ui;
int id;//定义定时器id
int temp;//全局变量
QString sectime;
QTextToSpeech *speecher;
};
#endif // WIDGET_H
源文件:widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
id = startTimer(1000);//开启定时器
ui->txtlab->setAlignment(Qt::AlignCenter);//居中
ui->timeoutlab->setAlignment(Qt::AlignCenter);
speecher = new QTextToSpeech(this);//给speecher申请空间
}
Widget::~Widget()
{
delete ui;
}
void Widget::timerEvent(QTimerEvent *e)//重写该函数
{
if(e->timerId()==id)
{
QTime s = QTime::currentTime();//获取当前时间
QString systime = s.toString("hh::mm::ss");//将时间转化成字符串
ui->systimelabel->setText(systime);//将时间显示
ui->systimelabel->setAlignment(Qt::AlignCenter);//居中
if((ui->timelineEdit->text())==systime&&(temp == 1))//判断时间字符串和行编辑器的是否相等且temp为1
{
int i;
for(i = 0; i < 5;i++)//循环5次
{
speecher->say(ui->timeoutlab->text());
}
}
}
}
void Widget::on_pushButton_clicked()
{
if(ui->pushButton->text()=="启动")
{
temp = 1;//将temp设置为1
ui->pushButton->setText("关闭");//改变按钮文本
}
else {
temp = 0;
ui->pushButton->setText("启动");
}
}
效果图
2.思维导图