C++,Qt学习 2024.9.10

发布于:2024-09-18 ⋅ 阅读:(12) ⋅ 点赞:(0)

制作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);

    }
}