widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPushButton>//按钮类
#include <QLineEdit>//行编辑器
#include <QLabel>//标签类
#include <QTextEdit>//输入框
#include <QTimerEvent>//定时器事件类
#include <QTimer> //定时器类
#include <QTime> //时间类
#include <QTimerEvent> //定时器事件类
#include <QTextToSpeech> //语音播报
#include <QMouseEvent> //鼠标事件
#include <QMessageBox> //提示框
#include <QObject>
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 *event)override;
void mouseMoveEvent(QMouseEvent *event) override;//鼠标移动事件
void mousePressEvent(QMouseEvent *event) override;//鼠标点击事件
public slots:
void click_startBtn();
void click_cancelBtn();
private:
Ui::Widget *ui;
QPushButton *startBtn; //启动按钮
QPushButton *cancelBtn; //取消按钮
QLabel *lab1; //显示系统时间
QLineEdit *lin1; //时间输入框
QTextEdit *tex1; //输入框
QTextToSpeech *tts; //语音播报
QTimer t1; //定义一个定时器变量
QPoint temp; //中间向量
int tid = 0; //输入时间时候使用
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
this->resize(500,400);//设置窗口大小
this->setWindowFlag(Qt::FramelessWindowHint);//设置去除窗口标题
//显示系统时间组件的一系列操作
lab1 = new QLabel(this);
lab1->resize(200,100);//设置大小
lab1->setStyleSheet("background-color:pink;border-radius:10;font-size: 15pt;");
lab1->move(20,20);//移动
t1.start(1000);//启动一个定时器
lab1->setAlignment(Qt::AlignCenter);//设置居中
//显示系统时间的逻辑
connect(&t1,&QTimer::timeout,[&](){
lab1->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));
});
//对可编辑时间lin1组件的操作
lin1 = new QLineEdit(this);
lin1->resize(250,30);//设置大小
lin1->move(lab1->x()+lab1->width()+10,lab1->y());//移动
lin1->setPlaceholderText("请输入时间");//设置占位符
//对启动按钮组件的操作
startBtn = new QPushButton(this);
startBtn->setText("启动");//设置默认文本
startBtn->resize(100,50);//设置大小
startBtn->move(lin1->x(),lin1->y()+lin1->height()+20);
startBtn->setStyleSheet("background-color:rgb(128, 128, 128);border-radius:10;");
connect(startBtn,&QPushButton::clicked,this,&Widget::click_startBtn);
//对取消按钮组件进行操作
cancelBtn = new QPushButton(this);//开辟空间
cancelBtn->setText("取消");
cancelBtn->resize(100,50);
cancelBtn->move(startBtn->x()+startBtn->width()+50,startBtn->y());
cancelBtn->setStyleSheet("background-color:rgb(128, 128, 128);border-radius:10;");
connect(cancelBtn,&QPushButton::clicked,this,&Widget::click_cancelBtn);
//对语音框组件进行操作
tex1 = new QTextEdit(this);
tex1->resize(500,400);
tex1->move(0,150);
tex1->setPlaceholderText("请输入你要朗读的内容");
tts = new QTextToSpeech();
}
//启动逻辑槽函数
void Widget::click_startBtn()
{
//启动定时器
tid = this->startTimer(1000);
lin1->setReadOnly(true);//禁用
tex1->setReadOnly(true);//禁用
qDebug()<<"启动成功";
}
//取消逻辑槽函数
void Widget::click_cancelBtn()
{
int res = QMessageBox::information(this,
"取消",
"确定要取消嘛?",
QMessageBox::Yes|QMessageBox::No,
QMessageBox::No);
if(res == QMessageBox::Yes)
{
this->killTimer(tid);//关闭定时器
lin1->setReadOnly(false);//解除禁用
tex1->setReadOnly(false);//解除禁用
qDebug()<<"取消成功";
}
}
//定时器处理函数
void Widget::timerEvent(QTimerEvent *event)
{
QString text = lab1->text();
if(event->timerId() == tid)
{
//如果两者相等就语音语音播报
if(lin1->text() == lab1->text())
{
tts->say(tex1->toPlainText());
qDebug()<<"语音播报成功";
}
}
}
//鼠标移动事件
void Widget::mouseMoveEvent(QMouseEvent *event)
{
this->move(event->globalPos()-temp);
}
//鼠标点击事件
void Widget::mousePressEvent(QMouseEvent *event)
{
temp = event->globalPos()-this->pos();
//点击鼠标左键关闭
if(event->button() == Qt::RightButton)
{
this->close();
}
}
Widget::~Widget()
{
delete ui;
}
效果展示: