QT作业4
Label上显示系统时间,程序运行就要有。
Lable2,:请输入闹钟的事件 行编辑器和启动按钮。启动按钮之后,到了行编辑器内的时间后,就开始语音播报最下方label中的内容。
语音播报5次
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QDebug>
#include <QTime>//时间类
#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();
//重写定时器事件函数的声明
void timerEvent(QTimerEvent *e);
private slots:
void on_pushButton_clicked();
private:
Ui::Widget *ui;
int id;//定时器id
int id2;//定时器2的id
QTextToSpeech *speecher;//语音播报
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
,speecher(new QTextToSpeech)
{
ui->setupUi(this);
QTime sys_time=QTime::currentTime();//获取系统时间
QString t=sys_time.toString("hh:mm:ss");//将系统时间转成字符串
ui->label->setText(t);//将当前时间显示在label中
id=startTimer(1000);//每隔一秒执行timerEvent()函数
}
//定时器超时执行该函数
void Widget::timerEvent(QTimerEvent *e){
if(e->timerId()==id){
//执行第一个label的定时功能
QTime sys_time=QTime::currentTime();//获取系统时间
QString t=sys_time.toString("hh:mm:ss");//将系统时间转成字符串
ui->label->setText(t);//将当前时间显示在label中
}
if(e->timerId()==id2)
{
//执行闹钟的定时功能
qDebug()<<"hao"<<endl;
speecher->say(ui->label_4->text());
speecher->say(ui->label_4->text());
speecher->say(ui->label_4->text());
speecher->say(ui->label_4->text());
speecher->say(ui->label_4->text());
//关闭定时器
killTimer(id2);
}
}
Widget::~Widget()
{
delete ui;
}
//启动按钮的槽函数
void Widget::on_pushButton_clicked()
{
//读取用户设置的闹钟时间
QString t1=ui->lineEdit->text();
qDebug()<<"用户设置的时间:"<<t1<<endl;
//设置一个定时器,到达该时间就播报
//求出定时器间隔时间
QTime time1=QTime::currentTime();//当前时间
QTime time2=QTime::fromString(t1);//label3中的时间
int cha=time1.msecsTo(time2);//当前时间和设置时间相差的毫秒数
qDebug()<<"相差毫秒数:"<<cha<<endl;
qDebug()<<"相差秒数:"<<cha/1000<<endl;
id2=startTimer(cha);
}