定时闹钟
widget.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();
protected:
void timerEvent(QTimerEvent *event)override; //重写定时器事件处理函数
private slots:
void on_start_btn_clicked(); //启动按钮槽函数
void on_close_btn_clicked(); //关闭按钮槽函数
void on_set_time_cursorPositionChanged(); //定时行编辑器槽函数
private:
Ui::Widget *ui;
//定义整型变量记录启动的定时器
int event_timer;
//记录闹钟时间
QString alarm;
//语音播报
QTextToSpeech speech;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->time_lable->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//设置时间显示文本水平垂直居中
ui->time_lable->setFont(QFont("黑体", 18));//设置时间显示文本字体和大小
event_timer = this->startTimer(1000);//启动定时器每秒自动调用函数
ui->close_btn->setEnabled(false);//设置关闭按钮可用状态,设置为不可用
ui->text_Edit->setPlaceholderText("输入需要语言播报的文本");//设置语音播报文本
}
Widget::~Widget()
{
delete ui;
}
//重写的定时器事件处理函数定义
void Widget::timerEvent(QTimerEvent *event){
if(event->timerId() == event_timer){
QDateTime td = QDateTime::currentDateTime();//获取系统时间
QString td1 = td.toString("yyyy/MM/dd\nhh:mm:ss");//将日期转换为字符串
ui->time_lable->setText(td1);//将时间展示到ui界面
QString td2 = td.toString("hh:mm");//设置闹钟
if(td2 == alarm){//到点播报
if(ui->text_Edit->toPlainText() == ""){
speech.say("时间到了,时间到了");
// 等待语音播报完成
while (speech.state() == QTextToSpeech::State::Speaking) {
QCoreApplication::processEvents();
}
}else{
speech.say(ui->text_Edit->toPlainText());
}
alarm = " ";
}
}
}
//启动按钮槽函数
void Widget::on_start_btn_clicked()
{
ui->close_btn->setEnabled(true);//设置关闭按钮可用状态,设置为可用
ui->start_btn->setEnabled(false);//设置自己为不可用状态
ui->text_Edit->setEnabled(false);//定时事件编辑行设置为不可用状态
ui->set_time->setEnabled(false);//定时编辑行设置为不可用状态
}
//关闭按钮槽函数
void Widget::on_close_btn_clicked()
{
ui->start_btn->setEnabled(true);//设置启动按钮可用状态,设置为可用
ui->close_btn->setEnabled(false);//设置自己为不可用状态
ui->text_Edit->setEnabled(true);//定时事件编辑行设置为可用状态
ui->set_time->setEnabled(true);//定时编辑行设置为可用状态
}
//定时行编辑器槽函数
void Widget::on_set_time_cursorPositionChanged()
{
ui->set_time->setPlaceholderText("小时:分钟(请用英文模式输入)");
alarm = ui->set_time->text();//设置闹钟时间
}