#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTime>
#include <QTimer>
#include <QTextToSpeech>
#include <QDebug>
#include <QTimerEvent>
#include <QMouseEvent>
#include <QRegExp>
#include <QValidator>
#include <QRegExpValidator>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
signals:
void my_speech();
public:
Widget(QWidget *parent = nullptr);
~Widget();
void timerEvent(QTimerEvent *event)override;
void mouseMoveEvent(QMouseEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
private slots:
void on_btn_start_clicked();
void my_on_speech();
void on_btn_stop_clicked();
private:
Ui::Widget *ui;
int t_local;
QString t_set;//用户设置的时间
QPoint p;//初始点
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->btn_stop->setDisabled(true);
this->setWindowFlag(Qt::FramelessWindowHint);
t_local=this->startTimer(1000);
ui->lab_time->setAlignment(Qt::AlignCenter);
ui->lab_time->setText(QTime::currentTime().toString("hh:mm:ss"));
//用户输入检查
QRegExp rx("([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])");
QValidator *v=new QRegExpValidator(rx,this);
ui->get_time->setValidator(v);
connect(this,&Widget::my_speech,this,&Widget::my_on_speech);
}
Widget::~Widget()
{
delete ui;
}
void Widget::timerEvent(QTimerEvent *event)
{
if(event->timerId()==t_local)
{
QString s=QTime::currentTime().toString("hh:mm:ss");
ui->lab_time->setText(s);
if(s==t_set)
{
emit my_speech();
}
}
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
this->move(event->globalPos()-p);
}
void Widget::mousePressEvent(QMouseEvent *event)
{
p=event->globalPos()-this->frameGeometry().topLeft();
}
void Widget::on_btn_start_clicked()
{
if(ui->get_time->hasAcceptableInput())
{
t_set=ui->get_time->text();
ui->btn_start->setEnabled(false);
ui->btn_stop->setEnabled(true);
}
}
void Widget::my_on_speech()
{
QTextToSpeech *q=new QTextToSpeech(this);
q->say(ui->get_text->toPlainText());
}
void Widget::on_btn_stop_clicked()
{
t_set.clear();
ui->btn_start->setEnabled(true);
ui->btn_stop->setEnabled(false);
}