自学内容网 自学内容网

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_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    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);
        }
    }
}


运行效果

点击启动

点击关闭

知识梳理

事件处理机制


原文地址:https://blog.csdn.net/m0_68379095/article/details/142830261

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!