• QTday04(事件)


    今日任务

    代码:

    头文件:

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #include
    10. QT_BEGIN_NAMESPACE
    11. namespace Ui { class Widget; }
    12. QT_END_NAMESPACE
    13. class Widget : public QWidget
    14. {
    15. Q_OBJECT
    16. public:
    17. Widget(QWidget *parent = nullptr);
    18. ~Widget();
    19. //重写时间处理函数
    20. void timerEvent(QTimerEvent *e)override;
    21. public slots:
    22. void my_time_slot();
    23. void myclock_slot();
    24. private slots:
    25. void on_startButton_clicked();
    26. void on_stopButton_clicked();
    27. private:
    28. Ui::Widget *ui;
    29. QTimer *myclock;
    30. QTextToSpeech *speecher;
    31. int flag=0;//闹钟默认为关闭0,开启为1
    32. };
    33. #endif // WIDGET_H

    widget.cpp

    1. #include "widget.h"
    2. #include "ui_widget.h"
    3. Widget::Widget(QWidget *parent)
    4. : QWidget(parent)
    5. , ui(new Ui::Widget)
    6. {
    7. ui->setupUi(this);
    8. QTimer *time=new QTimer(this);//系统时间
    9. connect(time,&QTimer::timeout,this,&Widget::my_time_slot);
    10. time->start(1000);
    11. }
    12. Widget::~Widget()
    13. {
    14. delete ui;
    15. }
    16. void Widget::timerEvent(QTimerEvent *e){
    17. }
    18. void Widget::my_time_slot(){
    19. //如果是指定的tid,就执行对应的指令
    20. QTime time=QTime::currentTime();
    21. ui->sysTimeLabel->setText(time.toString());
    22. ui->sysTimeLabel->setAlignment(Qt::AlignCenter);
    23. //QLCDNumber控件用于显示一个LCD数字。
    24. ui->sysTimeNumber->setDecMode();//十进制显示
    25. ui->sysTimeNumber->setDigitCount(8);//可以显示的位数
    26. ui->sysTimeNumber->display(time.toString());
    27. }
    28. void Widget::myclock_slot()
    29. {
    30. if(ui->lineEdit->text()==ui->sysTimeLabel->text())
    31. flag=1;
    32. if(flag){
    33. //时间到
    34. speecher=new QTextToSpeech(this);
    35. ui->incidentLabel->setText("时间到了,上路了~");
    36. speecher->say("时间到了,上路了~");
    37. }
    38. qDebug() << "flag=" << flag;
    39. }
    40. void Widget::on_startButton_clicked()
    41. {
    42. if(ui->lineEdit->text().isEmpty()){
    43. QMessageBox::information(this,"提示","时间不能为空",QMessageBox::Ok);
    44. return;
    45. }
    46. if(ui->lineEdit->text()< ui->sysTimeLabel->text()){
    47. QMessageBox::information(this,"提示","闹钟时间要大于系统时间",QMessageBox::Ok);
    48. return;
    49. }
    50. //启动计时器
    51. myclock=new QTimer(this);//闹钟时间
    52. connect(myclock,&QTimer::timeout,this,&Widget::myclock_slot);
    53. myclock->start(1000);
    54. QMessageBox::information(this,"提示","闹钟开始",QMessageBox::Ok);
    55. ui->incidentLabel->setText("闹钟启动ing");
    56. }
    57. void Widget::on_stopButton_clicked()
    58. {
    59. flag=0;
    60. speecher->stop();
    61. qDebug() << "speech stop";
    62. myclock->stop();
    63. QMessageBox::information(this,"提示","闹钟停止",QMessageBox::Ok);
    64. ui->incidentLabel->setText("闹钟停止ing");
    65. }

    ui

    运行结果:

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

    今日思维导图:

  • 相关阅读:
    8.26 Day44---项目部署
    [计算机网络]网络层概述
    备战数学建模34-BP神经网络预测2
    【Spring Security】安全框架学习(十)
    Mask R-CNN
    【C语言】前言关键字
    华为云云耀云服务器L实例评测|windows系统3389防爆破之安全加固教程
    这个 MySQL 问题困扰了我一个月,现在终于把他解决了
    【Intel CVPR 2024】通过图像扩散模型生成高质量360度场景,只需要一个语言模型
    【数字识别】基于DBN实现minist数据集手写数字识别附matlab代码
  • 原文地址:https://blog.csdn.net/weixin_53762703/article/details/133952950