12月12日

2023-12-13 06:53:29

写一个闹钟窗口,要求能显示系统时间,能设置闹铃,到时间后语音播报文字

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTimerEvent>  //定时器事件类
#include <QTime>        //时间类
#include <QTextToSpeech> //文本转语音类
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
signals:
    void my_signal();  //自定义信号

private slots:
    void on_pushButton_clicked();  //按钮点击函数
    void timerEvent(QTimerEvent *e);  //定时器超时时自动引用函数
    void my_slot();  //自定义槽函数


private:
    Ui::Widget *ui;
    int id;
    int t;
    QString alarm;  //定义时间
    QTextToSpeech *speecher; //定义语音播报者
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->label_3->setAlignment(Qt::AlignTop); //设置lable_3的文字在最顶端
    id = startTimer(1000); //id计时器一秒钟
    speecher = new QTextToSpeech(this);  //实例化语音播报者
    connect(this,&Widget::my_signal,this,&Widget::my_slot);  //连接自定义信号与自定义的槽
}

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

void Widget::my_slot() //自定义的槽函数,让语音播报者播放五次,三秒钟一次
{
    int i=0;
    while(i<5)
    {
        t = startTimer(3000);
        speecher->say(ui->label_3->text());  //语音播报者开始朗读
        i++;
    }
}

void Widget::on_pushButton_clicked()
{
    alarm = ui->lineEdit->text();  //设置alarm的值,用于定时闹钟
}

void Widget::timerEvent(QTimerEvent *e)  //当定时器超时时,自动调用该函数
{
    if(e->timerId()==id)   //当定时器为id时
    {
        QTime sys_time = QTime::currentTime();   //获取系统时间
        QString s = sys_time.toString("hh::mm::ss"); //转化形式
        ui->label->setText(s);    //把系统时间放入label
        ui->label->setAlignment(Qt::AlignCenter);   //将label中文字居中
        if(s == alarm)  //当系统当前时间与定时的时间相同时
        {
            emit my_signal(); //发送自定义信号
        }
    }
}

在这里插入图片描述
思维导图
在这里插入图片描述

文章来源:https://blog.csdn.net/qq_57071955/article/details/134957381
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。