widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 实例化播报员
speech = new QTextToSpeech(this);
// 设置定时输入框提示文本
ui->timer_edit->setPlaceholderText ("12:12:00");
// 启动定时器
sys_timer = this->startTimer (1000);// 当启动定时器后,每隔1000毫秒,会自动调用定时器事件处理函数
// 设置启动按钮
ui->start_btn->setEnabled (false); // 设置按钮不可用
// 设置停止按钮
ui->spot_btn->setEnabled (false); // 设置按钮不可用
}
Widget::~Widget()
{
delete ui;
}
// 重写的定时器事件处理函数
void Widget::timerEvent(QTimerEvent *event)
{
// 判断是否为系统时间定时器
if (event->timerId () == sys_timer) {
// 获取系统日期时间
QDateTime sys_dt = QDateTime::currentDateTime ();
// 将日期时间转换为字符串
QString dt = sys_dt.toString ("yyyy.MM.dd hh:mm:ss");
// 将日期时间显示到ui界面
ui->sys_time->setText (dt);
// 判断是否为定时框定时器
} else if (event->timerId () == time_timer) {
if (ui->sys_time->text ().right (8) == ui->timer_edit->text ()) {
// 停止定时的定时器
this->killTimer (time_timer); // 关闭定时器
// 设置停止按钮为不可用
ui->spot_btn->setEnabled (false);
// 播报文本
speech->say (ui->textEdit->toPlainText ());
}
}
}
// 定时输入框槽函数
void Widget::on_timer_edit_textChanged(const QString &arg1)
{
// 判断定时输入框和播报文本框是否空
if (arg1.isEmpty () || ui->textEdit->toPlainText ().isEmpty ()){
ui->start_btn->setEnabled (false); // 空,设置登录按钮不可用
} else {
ui->start_btn->setEnabled (true); // 不空,设置登录按钮可用
}
}
// 播报文本槽函数
void Widget::on_textEdit_textChanged()
{
// 判断定时输入框和播报文本框是否空
if (ui->timer_edit->text ().isEmpty () || ui->textEdit->toPlainText ().isEmpty ()){
ui->start_btn->setEnabled (false); // 空,设置登录按钮不可用
} else {
ui->start_btn->setEnabled (true); // 不空,设置登录按钮可用
}
}
// 启动按钮槽函数
void Widget::on_start_btn_clicked()
{
// 启动定时器
time_timer = this->startTimer (1000);// 当启动定时器后,每隔1000毫秒,会自动调用定时器事件处理函数
// 设置启动按钮为不可用
ui->start_btn->setEnabled (false);
// 设置定时输入框为不可用
ui->timer_edit->setEnabled (false);
// 设置播报框不可用
ui->textEdit->setEnabled (false);
// 设置停止按钮为可用
ui->spot_btn->setEnabled (true);
}
// 停止按钮槽函数
void Widget::on_spot_btn_clicked()
{
// 设置停止按钮为不可用
ui->spot_btn->setEnabled (false);
// 设置启动按钮为可用
ui->start_btn->setEnabled (true);
// 停止定时的定时器
this->killTimer (time_timer); // 关闭定时器
// 设置定时输入框为可用
ui->timer_edit->setEnabled (true);
// 设置播报框可用
ui->textEdit->setEnabled (true);
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTime> // 时间类
#include <QTimer> // 定时器类
#include <QTimerEvent> // 定时器事件
#include <QTextToSpeech> //语音播报类
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
protected:
// 重写定时器事件处理函数
void timerEvent(QTimerEvent *event) override;
private slots:
// 启动按钮槽函数
void on_start_btn_clicked();
// 停止按钮槽函数
void on_spot_btn_clicked();
// 定时输入框槽函数
void on_timer_edit_textChanged(const QString &arg1);
// 播报文本框槽函数
void on_textEdit_textChanged();
private:
Ui::Widget *ui;
QTimer *timer; // 定时器指针
// 记录系统时间的定时器
int sys_timer;
// 记录定时时间的定时器
int time_timer;
QTextToSpeech *speech; // 语音组件指针
};
#endif // WIDGET_H