实现一个定时播报功能
//头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTimer>
#include <QTime>
#include <QDateTime>
#include<QTimerEvent>
#include <QMessageBox>
#include<QTextToSpeech>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
signals:
void showText(); //信号函数声明
public:
Widget(QWidget *parent = nullptr);
~Widget();
void timerEvent(class QTimerEvent *event);
private slots:
void on_pushButton_start_clicked(); //启动按钮对应的槽函数
void on_pushButton_cancel_clicked(); //取消按钮对应的槽函数
void speech(); //自定义槽函数读取文本内容
private:
Ui::Widget *ui;
int timeId; //定时器1
QTimer *timer;
};
#endif // WIDGET_H
//源文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//开启一个定时器显示出系统时间
timeId=startTimer(1000);
timer=new QTimer;
//将另一个定时器的timeout信号连接到槽函数
connect(timer,&QTimer::timeout,[&](){emit speech();});
}
Widget::~Widget()
{
delete ui;
}
void Widget::timerEvent(QTimerEvent *event)
{
QDateTime sysDate=QDateTime::currentDateTime();
QString date=sysDate.toString("yyyy-MM-dd hh:mm:ss");
ui->label_systemTime->setText(date);
}
//启动按钮对应的槽函数
void Widget::on_pushButton_start_clicked()
{
ui->lineEdit->setDisabled(true); //设置行编辑器不可用
ui->textEdit->setDisabled(true); //设置文本编辑器不可用
ui->pushButton_start->setDisabled(true); //设置启动按钮不可用
QString text=(ui->lineEdit->text()); //获取行编辑器内容
int n=text.toInt();
timer->start(n*1000); //开启定时器
}
//取消按钮对应的槽函数
void Widget::on_pushButton_cancel_clicked()
{
auto btn=QMessageBox::question(this,"question","是否取消?",QMessageBox::Yes|QMessageBox::No);
//对用户选定的按钮,进行判断
if(btn==QMessageBox::Yes)
{
timer->stop();
ui->lineEdit->setEnabled(true); //设置行编辑器可用
ui->textEdit->setEnabled(true); //设置文本编辑器可用
ui->pushButton_start->setEnabled(true); //设置启动按钮可用
}
}
void Widget::speech()
{
//将文本内容读出来
QTextToSpeech *speech=new QTextToSpeech(this);
QString text=ui->textEdit->toPlainText(); //获取文本编辑器内容
speech->say(text);
timer->stop();
}