当前位置: 首页 > article >正文

使用C++编写一个语音播报时钟(Qt)

要求:当系统时间达到输入的时间时,语音播报对话框中的内容。定时可以取消。qt界面如上图所示。组件如下:
countdownEdit作为书写目标时间的line_edit
start_btn作为开始和停止的按钮
stop_btn作为取消的按钮
systimelab显示系统时间的lab
textEdit显示播报内容

代码:头文件:

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QTimer>            //定时器类
#include<QTime>            //时间类
#include<QTimerEvent>       //定时器事件类
#include<QDateTime>         //日期时间类
#include <QtTextToSpeech>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:

    void on_stop_btn_clicked();
    void on_start_btn_clicked();
    void sys_time_slot();

private:
    Ui::Widget *ui;
    //定义一个定时器变量
    QTimer t1;
    int tid = 0;        //定时器id号
    //void timerEvent(QTimerEvent *event) override;
    //定时器事件处理函数的声明
    QTextToSpeech *textToSpeech;

};
#endif // WIDGET_H

程序文件:
 

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent), ui(new Ui::Widget), textToSpeech(new QTextToSpeech(this))
{
    ui->setupUi(this);
    // 由于定时器事件的信号与槽的绑定只需要一次,所以直接写在构造函数中即可
    connect(&t1, &QTimer::timeout, this, &Widget::sys_time_slot);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_start_btn_clicked()
{
    if (ui->start_btn->text() == "启动")
    {
        t1.start(1000); // 每隔指定的时间,发送一个systime的信号
        ui->start_btn->setText("停止");
    }
    else
    {
        t1.stop();
        ui->start_btn->setText("启动");
    }
}

void Widget::sys_time_slot()
{
    // 获取系统的时间
    QTime sysTime = QTime::currentTime();
    // 将QTime类对象转变成字符串
    QString tm = sysTime.toString("hh:mm:ss");
    // 将时间展示到ui界面上
    ui->systimelab->setText(tm);
    // 设置标签居中显示
    ui->systimelab->setAlignment(Qt::AlignCenter);
    // 比较系统时间和用户输入的时间
    if (tm == ui->countdownEdit->text())
    {
        ui->textEdit->append("三更灯火五更鸡,\n正是男儿读书时,\n黑发不知勤学早,\n白首方悔读书迟。");
        // 语音播报
        textToSpeech->say(ui->textEdit->toPlainText());
    }
}

void Widget::on_stop_btn_clicked()
{
    ui->start_btn->setText("启动");
    ui->countdownEdit->setText("00:00:00"); // 清除显示
}


http://www.kler.cn/a/298641.html

相关文章:

  • 苹果系统MacOS下ObjectC建立的App程序访问opencv加载图片程序
  • vue3组件化开发优势劣势分析,及一个案例
  • 【练习】PAT 乙 1022 D进制的A+B
  • nginx学习之路-nginx配置https服务器
  • 深度学习中的步数指的是什么
  • AlphaPi相关硬件驱动提取
  • 硬刚苹果还得是华为
  • U盘格式化怎么办?这4款软件可以帮你进行数据恢复。
  • 【区块链 + 人才服务】区块链职业技能竞赛平台 | FISCO BCOS应用案例
  • 仿微信QQ聊天系统源码设计开发
  • OpenCV视频处理练习案例-学习篇
  • AI学习者的Python快速入门指南
  • 【Hot100】LeetCode—55. 跳跃游戏
  • 《零散知识点 · Kafka 知识拓展》
  • linux下framebuffer相关函数及知识点详解及整合运用
  • 【复盘】近期博客内容升级
  • http://localhost:15672/ 无法访问
  • pointpillar部署-TensorRT实现(二)
  • STM32 之 SDRAM 详解
  • jmeter之ForEach控制器使用
  • 【鸿蒙】HarmonyOS NEXT星河入门到实战3-ArkTS界面起步开发
  • 微信小程序:navigateTo跳转无效
  • ICP备案办理的流程中股东附件不显示如何解决
  • uniapp解决页面跳转时,含有base64的数据丢失问题
  • 设计模式 21 策略模式
  • Android 存储之 SharedPreferences 框架体系编码模板