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