欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > qt闹钟播报

qt闹钟播报

2024/10/23 15:34:07 来源:https://blog.csdn.net/m0_68379095/article/details/142830261  浏览:    关键词:qt闹钟播报

闹钟播报案例

如果 当前时间与定时时间一样时会播报下面文本输入内容

widget.h代码

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include<QTimer>              //定时器类
#include<QDebug>                //信息调试类
#include<QMessageBox>          //消息对话框类
#include<QTime>                //时间类,只包含时、分、秒、毫秒
#include<QTimerEvent>        //定时器事件类
#include<QDateTime>                //日期时间类,包含年、月、日、时、分、秒、毫秒
#include <QTextToSpeech>           //文本转语音类QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void timeout_slot();    //自定义处理timeout信号的槽函数的声明void on_eventstartbtn_clicked();void on_clockbtn_clicked();private:Ui::Widget *ui;//定义一个定时器类的指针QTimer *objTimer;/**********************************/int eventTimerId;   //定时器的id号//声明定时器事件处理函数void timerEvent(QTimerEvent *event) override;/**************************************/int clockTimerId;             //闹钟定时器的ID号QTextToSpeech *speecher;            //播报员指针
};
#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);//给定时器指针申请空间objTimer = new QTimer(this);//将定时器的timeout信号与自定义的槽函数进行连接connect(objTimer,&QTimer::timeout,this,&Widget::timeout_slot);//给播报员实例化对象speecher = new QTextToSpeech(this);
}Widget::~Widget()
{delete ui;
}/*******************************************************************************/
void Widget::on_clockbtn_clicked()
{//启动一个定时器objTimer->start(1000);  //每隔1000毫秒会自动发射一个timeout的信号//启动定时器clockTimerId = this->startTimer(1000);  //每隔1000毫秒,系统会自动调用timerEvent函数//设置成不可用状态ui->clockbtn->setEnabled(false);ui->clockEdit->setEnabled(false);ui->clockEdit2->setEnabled(false);
}//有关timeout信号对应的槽函数的定义
void Widget::timeout_slot()
{QTime sysTime = QTime::currentTime();   //通过该函数获取当前系统的时间,并以QTime类型的对象返回//将QTime类对象转变成QString类的对象QString t = sysTime.toString("hh:mm:ss");//将转换的时间展示到ui界面中的lab中ui->objTimelab->setText(t);
}/************************************************************************************/
//事件处理按钮对应的槽函数
void Widget::on_eventstartbtn_clicked()
{//启动一个定时器eventTimerId = this->startTimer(1000);  //启动一个定时器,并返回该定时器的id,并且每个1000毫秒会自动调用timerEvent函数//关闭闹钟this->killTimer(clockTimerId);//设置成可用状态ui->clockbtn->setEnabled(true);ui->clockEdit->setEnabled(true);ui->clockEdit2->setEnabled(true);
}//定时器事件处理函数
void Widget::timerEvent(QTimerEvent *event)
{// 判断是哪个定时器到位if(event->timerId() == clockTimerId){// 判断行编辑器中的文本与时间标签中的文本是否一致if(ui->clockEdit->text() == ui->objTimelab->text()){// 说明时间到了// 语音播报,起床了QString msg = ui->clockEdit2->text();speecher->say(msg);// 关闭闹钟this->killTimer(clockTimerId);// 设置成可用状态ui->clockbtn->setEnabled(true);ui->clockEdit->setEnabled(true);ui->clockEdit2->setEnabled(true);}}
}

运行效果

点击启动

点击关闭

知识梳理

事件处理机制

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com