制作ui界面实现:模拟定时闹钟功能
启动后,lab实时获取系统时间,当系统时间走到设置的时间时,语音播报下方lineEdit中的内容,启动前取消按键不可用,启动后除了取消按键可用其他部分都设为不可用,播报语音开始时重置回开始前的状态 。

.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTimer>   //定时器类
#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 on_pushButton_clicked();
    void timeout_slot();    //自定义处理超时信号槽函数
    void on_pushButton_2_clicked();
private:
    Ui::Widget *ui;
    //定义一个定时器变量
    QTimer t1;
    QTextToSpeech *textToSpeech;  // 添加 QTextToSpeech 对象
};
#endif // WIDGET_H 
.cpp文件
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
    , textToSpeech(new QTextToSpeech(this))  // 初始化 QTextToSpeech
{
    ui->setupUi(this);
    //绑定定时器信号与槽
    connect(&t1,&QTimer::timeout,this,&Widget::timeout_slot);
    //将停止按钮初始状态设置为不可用
    ui->pushButton_2->setEnabled(false);
}
Widget::~Widget()
{
    delete ui;
}
void Widget::on_pushButton_clicked()
{
    //启动一个计时器
    t1.start(1000);
    //将自己设置为不可用
    ui->pushButton->setEnabled(false);
    //将取消按钮设置为可用
    ui->pushButton_2->setEnabled(true);
    //将两个lineEdit设置为不可用
    ui->lineEdit->setEnabled(false);
    ui->lineEdit_2->setEnabled(false);
}
void Widget::on_pushButton_2_clicked()
{
    //关闭计时器
    t1.stop();
    //将启动按钮设置为可用
    ui->pushButton->setEnabled(true);
    //将自己设置为不可用
    ui->pushButton_2->setEnabled(false);
    //将时间显示label清空
    ui->label->clear();
    //将两个lineEdit设置为可用
    ui->lineEdit->setEnabled(true);
    ui->lineEdit_2->setEnabled(true);
}
//自定义超时函数
void Widget::timeout_slot()
{
    int count=0;
    //获取系统时间
    QTime sysTime=QTime::currentTime();
    //将QTime类对象转变成字符串
    QString tm=sysTime.toString("hh:mm:ss");
    //将时间展示再ui界面上
    ui->label->setText(tm);
    //设置标签居中显示
    ui->label->setAlignment(Qt::AlignHCenter);
    //设置语音播报功能
    if(ui->lineEdit->text()==ui->label->text())
    {
        //当显示的系统时间等于设置时间,语音播报lineEdit2的内容
        textToSpeech->say(ui->lineEdit_2->text());
        count=1;
    }
    if(count==1)
    {
        //关闭计时器
        t1.stop();
        //将启动按钮设置为可用
        ui->pushButton->setEnabled(true);
        //将停止设置为不可用
        ui->pushButton_2->setEnabled(false);
        //将时间显示label清空
        ui->label->clear();
        ui->lineEdit->clear();
        //将两个lineEdit设置为可用
        ui->lineEdit->setEnabled(true);
        ui->lineEdit_2->setEnabled(true);
    }
}
 
                










![[网鼎杯 2020 朱雀组]Nmap 历程记录](https://i-blog.csdnimg.cn/direct/08ac1c1ee869410dabd753e39fdd474c.png)







