今日任务

代码:
头文件:
- #ifndef WIDGET_H
- #define WIDGET_H
-
- #include
- #include
- #include
- #include
- #include
- #include
- #include
-
- 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)override;
- public slots:
- void my_time_slot();
- void myclock_slot();
- private slots:
- void on_startButton_clicked();
-
- void on_stopButton_clicked();
-
- private:
- Ui::Widget *ui;
- QTimer *myclock;
- QTextToSpeech *speecher;
- int flag=0;//闹钟默认为关闭0,开启为1
-
- };
- #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);
- QTimer *time=new QTimer(this);//系统时间
- connect(time,&QTimer::timeout,this,&Widget::my_time_slot);
- time->start(1000);
-
-
- }
- Widget::~Widget()
- {
- delete ui;
- }
-
- void Widget::timerEvent(QTimerEvent *e){
-
- }
- void Widget::my_time_slot(){
- //如果是指定的tid,就执行对应的指令
- QTime time=QTime::currentTime();
-
- ui->sysTimeLabel->setText(time.toString());
- ui->sysTimeLabel->setAlignment(Qt::AlignCenter);
- //QLCDNumber控件用于显示一个LCD数字。
- ui->sysTimeNumber->setDecMode();//十进制显示
- ui->sysTimeNumber->setDigitCount(8);//可以显示的位数
- ui->sysTimeNumber->display(time.toString());
- }
-
- void Widget::myclock_slot()
- {
- if(ui->lineEdit->text()==ui->sysTimeLabel->text())
- flag=1;
- if(flag){
- //时间到
- speecher=new QTextToSpeech(this);
- ui->incidentLabel->setText("时间到了,上路了~");
- speecher->say("时间到了,上路了~");
- }
- qDebug() << "flag=" << flag;
- }
-
- void Widget::on_startButton_clicked()
- {
- if(ui->lineEdit->text().isEmpty()){
- QMessageBox::information(this,"提示","时间不能为空",QMessageBox::Ok);
- return;
- }
- if(ui->lineEdit->text()< ui->sysTimeLabel->text()){
- QMessageBox::information(this,"提示","闹钟时间要大于系统时间",QMessageBox::Ok);
- return;
- }
- //启动计时器
- myclock=new QTimer(this);//闹钟时间
- connect(myclock,&QTimer::timeout,this,&Widget::myclock_slot);
- myclock->start(1000);
- QMessageBox::information(this,"提示","闹钟开始",QMessageBox::Ok);
- ui->incidentLabel->setText("闹钟启动ing");
-
- }
-
- void Widget::on_stopButton_clicked()
- {
-
- flag=0;
- speecher->stop();
- qDebug() << "speech stop";
- myclock->stop();
- QMessageBox::information(this,"提示","闹钟停止",QMessageBox::Ok);
- ui->incidentLabel->setText("闹钟停止ing");
- }
ui

运行结果:
设定的时间格式需要用英文冒号隔开,要大于系统时间,点击启动之后,到指定时间会执行对应事件:文字显示语音播报。但是语音播报功能无法立即关闭,会继续执行它应当播报的次数,不知道为啥,调用stop也没用。



今日思维导图:
