结果:
widget.h
#include <QWidget>
#include <QTimer> //定时器类
#include <QTime> //时间类
#include <QTimerEvent> //定时器事件类
#include <QDateTime> //日期时间类
#include <QFont>
#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_start_But_clicked();
//关闭按钮
void on_close_But_clicked();
private:
Ui::Widget *ui;
//使用定时器类 定义一个定时器指针
QTimer *timer;
//闹钟定时器ID
int time_id;
//定义一个整形变量记录定时器
int time_event;
//语言播报
QTextToSpeech *my_speech;
//记录闹钟的时间
QTime alarm_clock;
protected:
//重写定时器事件处理函数
void timerEvent(QTimerEvent *event)override;
widget.cpp
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//关闭按钮默认是不可点击
ui->close_But->setEnabled(false);
//打开计时器
this ->startTimer(100);
//set_time
ui ->set_tim ->setPlaceholderText("闹钟格式[00:00]");
//语言播报内容
ui ->textEdit ->setFontPointSize(20);
ui ->textEdit ->setPlaceholderText("请输入播报内容");
//给语言播报初始化
my_speech = new QTextToSpeech(this);
}
//启动按钮对应槽函数
void Widget::on_start_But_clicked()
{
time_id = this ->startTimer(1000);
ui->close_But->setEnabled(true);
ui->start_But->setEnabled(false);
}
//关闭按钮对应槽函数
void Widget::on_close_But_clicked()
{
//停止定时器
this ->killTimer(time_id);
ui->close_But->setEnabled(false);
ui->start_But->setEnabled(true);
}
//处理timeout信号对应的槽函数
void Widget::timerEvent(QTimerEvent *event)
{
//获取系统时间
QTime my_time = QTime::currentTime();
//将系统时间转换为字符串
QString my_time_string = my_time.toString("hh:mm:ss");
//更改字体大小
QFont my_size;
my_size.setPixelSize(50);
ui ->now_time ->setAlignment(Qt::AlignCenter);
ui ->now_time ->setFont(my_size);
//将现在的时间打印到界面上
ui ->now_time ->setText(my_time_string);
//闹钟设置
QTime time;
QString str = time.currentTime().toString("hh:mm");
//现在的时间等于我设定的闹钟的时间
if(str == ui->set_tim->text())
{
//清空闹钟设置
this->ui->set_tim->setText("");
//语言播报
my_speech ->say(ui ->textEdit ->toPlainText());
//set_time
ui ->set_tim ->setPlaceholderText("闹钟格式[00:00]");
//语言播报内容
ui ->textEdit ->setPlaceholderText("请输入播报内容");
//关闭闹钟
killTimer(time_id);
ui ->start_But ->setEnabled(true);
ui ->close_But ->setEnabled(false);
}
}