• C++ 事件处理机制 定时器应用


    文件管理需加入新的类库(语音播报)

    头文件:

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include
    4. #include //定时器类
    5. #include //日期时间类
    6. #include //定时器处理事件类
    7. #include //引入文本转语音头文件
    8. QT_BEGIN_NAMESPACE
    9. namespace Ui { class Widget; }
    10. QT_END_NAMESPACE
    11. class Widget : public QWidget
    12. {
    13. Q_OBJECT
    14. public:
    15. Widget(QWidget *parent = nullptr);
    16. ~Widget();
    17. void timerEvent(QTimerEvent* e);//重写的 定时器事件处理函数
    18. private slots:
    19. void on_start_pushButton_clicked();//启动按钮槽函数
    20. void on_close_pushButton_clicked();
    21. private:
    22. Ui::Widget *ui;
    23. QTextToSpeech speecher;
    24. };
    25. #endif // WIDGET_H

    源代码 :

    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. startTimer(500);//每半秒钟启动一次定时器
    9. ui->close_pushButton->setDisabled(true);//关闭按钮禁用
    10. }
    11. Widget::~Widget()
    12. {
    13. delete ui;
    14. }
    15. void Widget::timerEvent(QTimerEvent* e)//定时器 事件处理函数
    16. {
    17. //将当前的日期及时间展示到lab中
    18. QDateTime data = QDateTime::currentDateTime(); //获取当前的系统日期
    19. //将日期转换为字符串
    20. QString data_str = data.toString("yyyy:MM:dd-hh:mm:ss");
    21. //将字符串展示到lab中
    22. ui->time_label->setText(data_str);
    23. if(ui->time_label->text() == ui->lineEdit->text())
    24. {
    25. speecher.say(ui->textEdit->toPlainText());
    26. }
    27. }
    28. void Widget::on_start_pushButton_clicked()//启动按钮槽函数
    29. {
    30. ui->start_pushButton->setDisabled(true);//启动按钮禁用
    31. ui->lineEdit->setDisabled(true);//时间设置禁用
    32. ui->textEdit->setDisabled(true);//文本设置禁用
    33. ui->close_pushButton->setDisabled(false);//关闭按钮可用
    34. }
    35. void Widget::on_close_pushButton_clicked()//关闭按钮槽函数
    36. {
    37. ui->close_pushButton->setDisabled(true);//关闭按钮禁用
    38. ui->start_pushButton->setDisabled(false);//启动按钮可用
    39. ui->lineEdit->setDisabled(false);//时间设置可用
    40. ui->textEdit->setDisabled(false);//文本设置可用
    41. }

    测试函数

    1. #include "widget.h"
    2. #include
    3. int main(int argc, char *argv[])
    4. {
    5. QApplication a(argc, argv);
    6. Widget w;
    7. w.show();
    8. return a.exec();
    9. }

    测试结果:

     

  • 相关阅读:
    linux系统常用命令
    vue项目打包报错,jenkins发版前端时,提示内存溢出
    Webpack打包图片-JS-Vue
    问题求助 -MindSpore 训练问题
    Python:使用docxtpl实现模板生成docx文件
    路径总和 III
    统一异常的处理方法
    Android MVVM架构 + Retrofit完成网络请求
    【Text2SQL 论文】How to prompt LLMs for Text2SQL
    c++智能指针
  • 原文地址:https://blog.csdn.net/weixin_60354809/article/details/127911524