QT day05
扫测资讯 2024-10-15 00:07 9 0
实现可语音播报的闹钟
头文件:
#include <QTime> //时间类
#include <QTimerEvent> //定时器事件类
#include <QDateTime> //日期时间类
#include <QTextToSpeech> //语音播报类
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
signals:
public slots:
void start_slot();
void timeout_slot();
void cancel_slot();
public:
Widget(QWidget *parent = nullptr);
~Widget();
void mouseMoveEvent(QMouseEvent *event); //鼠标移动事件
void mousePressEvent(QMouseEvent *event); //鼠标点击事件
void speakText(const QString &text);
private:
Ui::Widget *ui;
QPoint temp;
QLabel *sysTime,*lab1;
QLineEdit *modTime,*clockTxt;
QPushButton *startBtn,*cancelBtn;
int timerId = 0;
QTimer t;
};
#endif // WIDGET_H
源文件:
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
this->setFixedSize(500,500);
//this->setWindowFlag(Qt::FramelessWindowHint);
//标签类
sysTime = new QLabel(this);
sysTime->resize(200,140);
sysTime->move(50,50);
sysTime->setScaledContents(true);
sysTime->setStyleSheet("background-color:lightgreen; border-radius:20;\
font-size:20px;font-weight:bold");
//按钮类
startBtn = new QPushButton("启动",this);
cancelBtn = new QPushButton("关闭",this);
startBtn->move(sysTime->x()+sysTime->width()+15,110);
cancelBtn->move(startBtn->x()+startBtn->width()+5,startBtn->y());
startBtn->resize(40,30);
cancelBtn->resize(40,30);
//行标签类
modTime = new QLineEdit(this);
modTime->move(sysTime->y()+sysTime->width()+15,sysTime->y());
modTime->setPlaceholderText("输入定时");
modTime->resize(180,30);
clockTxt = new QLineEdit(this);
clockTxt->move(50,230);
clockTxt->resize(400,250);
clockTxt->setPlaceholderText("输入闹铃文本");
//设置文本对齐到左上角
clockTxt->setAlignment(Qt::AlignLeft|Qt::AlignTop);
//连接信号与槽
connect(startBtn,&QPushButton::clicked,this,&Widget::start_slot);
connect(&t,&QTimer::timeout,this,&Widget::timeout_slot);
connect(cancelBtn,&QPushButton::clicked,this,&Widget::cancel_slot);
}
Widget::~Widget()
{
delete ui;
}
//鼠标移动事件
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();
}
}
void Widget::start_slot()
{
t.start(1000); //每隔指定时间,发送一个timeout信号
}
void Widget::timeout_slot()
{
//获取系统时间
QTime sysTime = QTime::currentTime();
//将QTime类对象转变成字符串
QString sysTimeStr = sysTime.toString("hh:mm:ss");
this->sysTime->setText(sysTimeStr);
//sysTime->setAlignment(Qt::AlignCenter);
//将3个地方设置成不可点击
startBtn->setEnabled(false);
modTime->setReadOnly(true);
clockTxt->setReadOnly(true);
//比较逻辑,如果和输入的时间相等,就发出声音
QString modTimeStr = modTime->text();
if(sysTimeStr == modTimeStr)
{
qDebug()<<"发出声音";
speakText(clockTxt->text());
}
}
void Widget::cancel_slot()
{
int res = QMessageBox::information(this,
"提示",
"您确定要取消吗?",
QMessageBox::Yes|QMessageBox::No,
QMessageBox::Yes);
if(res == QMessageBox::Yes)
{
qDebug()<<"解除限制功能";
t.stop();
startBtn->setEnabled(true);
modTime->setReadOnly(false);
clockTxt->setReadOnly(false);
}
else if(res == QMessageBox::No)
{
qDebug()<<"继续执行程序";
}
}
void Widget::speakText(const QString &text)
{
QTextToSpeech *speaker = new QTextToSpeech;
speaker->say(text);
}
主函数:
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}