1.
//头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTimer>
#include <QTime>
#include <QTimerEvent>
#include <QDebug>
#include <QMessageBox>
#include <QTextToSpeech>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
private slots:
void on_timeout();
void on_timeout1();
void timerEvent(QTimerEvent *event);
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
QTimer *timer;
QTextToSpeech *speech;
QString s;
int time_out;
int num_t;
};
#endif // WIDGET_H
//源文件
#include "widget.h"
#include "ui_widget.h"
static int i;
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
timer = new QTimer(this);
speech = new QTextToSpeech(this);
num_t = this->startTimer(1000);
ui->label->setStyleSheet("font-size:60px;color:black");
ui->pushButton->setText("启动");
ui->pushButton_2->setText("取消");
//默认设置起床铃声
ui->textEdit_2->setText("起床了");
ui->textEdit->setStyleSheet("font-size:60px;color:black");
//启动计时器
connect(ui->pushButton,&QPushButton::clicked,this,&Widget::on_timeout);
connect(ui->pushButton_2,&QPushButton::clicked,this,&Widget::on_timeout1);
//判断时间和s是否一致如果一致就需要
}
Widget::~Widget()
{
delete ui;
}
//定时
void Widget::on_timeout()
{
//记录下闹钟时间
s = ui->textEdit->toPlainText();
//qDebug()<<s;
//按下设置后就需要取消给他修改可以使用
//同时把取消设置为可以使用
//修改静态时间为0
i = 0;
ui->pushButton->setEnabled(false);
ui->pushButton_2->setEnabled(true);
//qDebug()<<s.toInt();
//时间的合法性检查
if(s == ""||s.toInt()>24||s.toInt()<0)
{
ui->pushButton->setEnabled(true);
QMessageBox error(QMessageBox::Warning,"警告","时间设置有误",QMessageBox::Ok|QMessageBox::Cancel,this);
int res = error.exec();
if(res == QMessageBox::Cancel)
{
this->close();
}
}
//打开计时器,如果是和标记时间一样就发信号需要语言
time_out = this->startTimer(1000);
}
void Widget::timerEvent(QTimerEvent *event)
{
QTime time;
//这是左上角的实时时间
if(event->timerId() == num_t)
{
ui->label->setText(time.currentTime().toString("hh:mm:ss"));
}
if(event->timerId() == time_out)
{
//判断时间是否和闹铃时间一致一致就闹铃
QString str = time.currentTime().toString("hh:mm");
//qDebug()<<str;
if(str == s)
{
//qDebug("时间到了");
//触发一个读信息的
speech->say(ui->textEdit_2->toPlainText());
//触发次数
i++;
//qDebug()<<i;
if(i > 10)
{
killTimer(time_out);
}
}
}
}
//取消按钮的作用
void Widget::on_timeout1()
{
//取消按钮按了后把登录按钮设为有效
ui->pushButton->setEnabled(true);
//杀死闹铃
killTimer(time_out);
//把自己设为失效
ui->pushButton_2->setEnabled(false);
}
如果时间不合法