作业:实现闹钟定时功能,时间到达后播报文本编辑器内容。
代码实现:
my.h:
#ifndef MY_H
#define MY_H
#include <QWidget>
#include <QTimerEvent> //定时器事件处理类
#include <QDateTime>
#include <QTextToSpeech>
namespace Ui {
class My;
}
class My : public QWidget
{
Q_OBJECT
public:
explicit My(QWidget *parent = nullptr);
~My();
void timerEvent(QTimerEvent *e)override; //声明定时器事件处理函数
private slots:
void on_startBtn_clicked();
void on_closeBtn_clicked();
private:
Ui::My *ui;
QTextToSpeech *speecher;
int tid; //定义一个定时器标识
};
#endif // MY_H
main.cpp:
#include "my.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
My w;
w.show();
return a.exec();
}
my.cpp:
#include "my.h"
#include "ui_my.h"
My::My(QWidget *parent) :QWidget(parent),ui(new Ui::My)
{
ui->setupUi(this);
//播报者
speecher = new QTextToSpeech(this);
//启动一个定时器
tid = this->startTimer(0); //每隔0s调用timerEvent函数
}
My::~My()
{
delete ui;
}
//处理点击启动按钮的槽函数
void My::on_startBtn_clicked()
{
//将启动按钮禁用
ui->startBtn->setEnabled(false);
//将文本编辑器禁用
ui->textEdit->setEnabled(false);
//将关闭按钮开启
ui->closeBtn->setEnabled(true);
}
//处理关闭启动按钮的槽函数
void My::on_closeBtn_clicked()
{
//将关闭按钮禁用
ui->closeBtn->setEnabled(false);
//将启动按钮开启
ui->startBtn->setEnabled(true);
//将文本编辑器开启
ui->textEdit->setEnabled(true);
}
void My::timerEvent(QTimerEvent *e)
{
if(e->timerId() == tid)
{
//获取系统当前的日期时间
QDateTime sysTime = QDateTime::currentDateTime();
//将事件展示到ui界面
ui->timeLab->setText(sysTime.toString("yyyy-MM-dd-hh:mm:ss"));
//设置lab内容居中显示
ui->timeLab->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
//判断闹钟设置时间是否与当前时间相等并且判断是否开启闹钟
if(sysTime.time() == ui->clockEdit->time() && ui->startBtn->isEnabled() == false)
{
speecher->say(ui->textEdit->toPlainText());
}
}
}
运行结果: