【Qt】实现一个小闹钟
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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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;
}
效果展示: