• 2022-9-4QT实现迷你闹铃(定时播报指定内容)


    首先是头文件部分内容,包含语音播报者,定时器等

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include
    4. #include
    5. #include
    6. #include //定时器
    7. //#include
    8. #include
    9. #include
    10. #include
    11. #include
    12. #include
    13. QT_BEGIN_NAMESPACE
    14. namespace Ui { class Widget; }
    15. QT_END_NAMESPACE
    16. class Widget : public QWidget
    17. {
    18. Q_OBJECT
    19. signals:
    20. void signal_1();
    21. public:
    22. Widget(QWidget *parent = nullptr);
    23. ~Widget();
    24. void timerEvent(QTimerEvent *event); //重写定时器事件
    25. void paintEvent(QPaintEvent *event); //重写背景虚函数
    26. private slots:
    27. void on_timerbtn_clicked();
    28. void on_timeout_sloat(); //自定义槽函数处理timeout的处理逻辑
    29. void on_timerevent_clicked();
    30. void on_stopbtn_clicked();
    31. void on_textEdit_copyAvailable();
    32. void on_lineEdit_cursorPositionChanged();
    33. private:
    34. Ui::Widget *ui;
    35. QTimer *t1; //定义时间定时器类的指针
    36. int ID; //starttimer函数对应的ID
    37. QString str;
    38. QString str1;
    39. QString time_text;
    40. QTextToSpeech speech;
    41. };
    42. #endif // WIDGET_H

    main.cpp部分,负责输出用,不需要多谢东西

    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. }

     widget.cpp部分代码,其中有两个图片地址是用来设置背景图和lab标签图

    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. this->setWindowTitle("♥♥♥迷你定时闹钟♥♥♥");
    9. //给定时器指针实例化对象
    10. t1= new QTimer(this);
    11. //链接timeout信号对应的槽函数
    12. connect(t1,&QTimer::timeout,this,&Widget::on_timeout_sloat);
    13. ui->timerlab->setStyleSheet("border-image:url(:/12.png)");
    14. }
    15. Widget::~Widget()
    16. {
    17. delete ui;
    18. }
    19. //重写的定时器事件
    20. void Widget::timerEvent(QTimerEvent *event)
    21. {
    22. //1.获取系统事件
    23. QTime currentTime =QTime::currentTime();
    24. //2.将系统事件转换为字符串
    25. time_text=currentTime.toString("hh:mm:ss");
    26. //3.将事件展示到ui界面
    27. ui->timereventlab->setText(time_text);
    28. }
    29. void Widget::paintEvent(QPaintEvent *event)
    30. {
    31. QPainter *painter = new QPainter(this);
    32. QPixmap pic = QPixmap(":/6.png");
    33. painter->drawPixmap(0,0,this->width(),this->height(),pic);
    34. }
    35. //timerbtn对应的槽函数,实现类对象处理的定时器事件
    36. void Widget::on_timerbtn_clicked()
    37. {
    38. //if(ui->timerbtn->text()=="start")
    39. //{
    40. //开启定时器事件
    41. t1->start(1000); //每隔1s(msec)后,会自动发射一个timeout信号,可以在槽函数中书写逻辑
    42. ui->timerbtn->setEnabled(false); //使开始按钮失效
    43. ui->lineEdit->setEnabled(false); //使行编辑器失效
    44. ui->timereventlab->clear(); //清空小表盘,改为大表盘
    45. //关闭定时器事件
    46. killTimer(ID);
    47. // ui->timerbtn->setText("stop");
    48. //}
    49. // else if(ui->timerbtn->text()=="stop")
    50. // {
    51. //关闭定时器事件
    52. // t1->stop();
    53. // ui->timerbtn->setText("start");
    54. // }
    55. }
    56. //处理定时器类发射的timeout信号的槽函数
    57. void Widget::on_timeout_sloat()
    58. {
    59. //1.获取系统时间
    60. QDateTime currentTime=QDateTime::currentDateTime();
    61. //将时间放到对应的lab中
    62. QString timeText = currentTime.toString("yyyy-MM-dd hh-mm-ss");
    63. ui->timerlab->setText(timeText);
    64. if(ui->lineEdit->text()==timeText)
    65. {
    66. speech.say(ui->textEdit->toPlainText());
    67. }
    68. }
    69. //timeeventbtn按钮对应的槽函数
    70. void Widget::on_timerevent_clicked()
    71. {
    72. //开启定时器事件
    73. ID=startTimer(1000); //一旦超时,就会触发定时器事件,所以要重写
    74. }
    75. void Widget::on_stopbtn_clicked()
    76. {
    77. ui->timerbtn->setEnabled(true);//使开始按钮启动
    78. ui->lineEdit->setEnabled(true); //使行编辑器启动
    79. ui->textEdit->clear();
    80. }
    81. void Widget::on_textEdit_copyAvailable()
    82. {
    83. str = ui->textEdit->toPlainText();
    84. }
    85. void Widget::on_lineEdit_cursorPositionChanged()
    86. {
    87. str1=ui->lineEdit->text();
    88. }

    最后是最终结果,和ui图

     

     

  • 相关阅读:
    计算机毕业设计Java中华美食文化网站(源码+系统+mysql数据库+Lw文档)
    28.云原生之服务网格ServiceMesh和istio
    C++ 通过CreateProcess函数和ShellExecute函数打开另一个exe
    Java的CAS和synchronized原理解析【干货】
    一个小脚本,挑选自己想要的图片并存入固定文件夹
    MYSQL 8 部分回收用户的权限,怎么操作
    ai智能电话机器人如何撑起一个部门
    python对RabbitMQ的简单使用
    含文档+PPT+源码等]精品spring boot+MySQL线上点餐系统vue[包运行成功]程序设计项目源码Java毕业设计
    mysql同时使用order by排序和limit分页数据重复问题
  • 原文地址:https://blog.csdn.net/m0_58344947/article/details/126697979