使用QT cretator完成下面功能
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPushButton>
#include <QTextToSpeech>
#include <QLineEdit>
#include <QTextEdit>
#include <QLabel>
#include <QTimer>
#include <QTime>
#include <QTimerEvent>
#include <QDateTime>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void mouseMoveEvent(QMouseEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
signals:
void min_signal();
void close_signal();
void clock_signal();
void cancel_signal();
// void addtime_signal();
public slots:
void close_slot();
// void min_slot();
void action_slot();
void cancel_slot();
void clock_slot();
// void addtime_slot();
private:
Ui::Widget *ui;
QLabel *TimeLabel;
QTextEdit *HintEdit;
QLineEdit *TimeEdit;
QPushButton *ActionBtn;
QPushButton *CancelBtn;
QPushButton *MinBtn;
QPushButton *CloseBtn;
QPoint temp; //辅助向量坐标点
//有关事件处理函数版本
int SysTimeTid = 0; //系统定时器id号
int UsrTimeTid = 1; //用户定时器
QString UsrTime;
QString SysTime;
void timerEvent(QTimerEvent *event) override ;
QTextToSpeech *Voicer = new QTextToSpeech(this);
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <QVBoxLayout>
#include <QWidget>
#include <QLabel>
#include <QMainWindow>
#include <QPushButton>
#include <QMovie>
#include <QDebug>
#include <QMessageBox>
#include <QMouseEvent>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//创建自定义控件
this->TimeLabel = new QLabel("时间",this);
this->TimeEdit = new QLineEdit(this);
this->ActionBtn = new QPushButton("启动",this);
this->CancelBtn = new QPushButton("取消",this);
this->MinBtn = new QPushButton("",this);
this->CloseBtn = new QPushButton("",this);
this->HintEdit = new QTextEdit("三更灯火五更鸡,正是男儿读书时,"
"黑发不知勤学早,白首方悔读书迟",this);
//触发刷新时间事件
SysTimeTid = this->startTimer(1000);
//界面布局
this->resize(600,400);
setWindowFlags(windowFlags() | Qt::FramelessWindowHint); //关闭上方标题栏
this->setWindowIcon(QIcon(":/pictrue/clock.png")); //窗口图标
CloseBtn->setIcon(QIcon(":/pictrue/close.png"));
CloseBtn->resize(30,30);
CloseBtn->setFlat(true); //设置按钮扁平风格
CloseBtn->setStyleSheet("background-color: rgba(255, 0, 0, 0.9);");
//CloseBtn->move(570,0);
CloseBtn->setGeometry(QRect(this->width() - CloseBtn->width(), 0, CloseBtn->width(), CloseBtn->height()));
MinBtn->setIcon(QIcon(":/pictrue/min.png"));
MinBtn->resize(30,30);
MinBtn->setFlat(true); //设置按钮扁平风格
MinBtn->setStyleSheet("background-color: rgba(255, 0, 0, 0.9);");
MinBtn->setGeometry(QRect(this->width() - MinBtn->width()- CloseBtn->width(), 0, MinBtn->width(), MinBtn->height()));
TimeLabel->move(20,30);
TimeLabel->resize(290,50);
this->TimeLabel->setAlignment(Qt::AlignCenter);
TimeEdit->resize(250,40);
ActionBtn->resize(125,50);
CancelBtn->resize(125,50);
HintEdit->resize(550,250);
TimeEdit->move(TimeLabel->x()+TimeLabel->width()+10,TimeLabel->y());
ActionBtn->move(TimeEdit->x(),TimeEdit->y()+TimeEdit->height()+5);
CancelBtn->move(ActionBtn->x()+ActionBtn->width(),ActionBtn->y());
HintEdit->move(TimeLabel->x(),TimeEdit->y()+TimeEdit->height()+50);
/*******************************将按钮绑定对应信号*****************************************/
connect(this->CloseBtn,&QPushButton::clicked,this,&Widget::close_slot);
connect(this->MinBtn,&QPushButton::clicked,[&](){
this->showMinimized(); });
connect(this->ActionBtn,&QPushButton::clicked,this,&Widget::action_slot);
connect(this->CancelBtn,&QPushButton::clicked,this,&Widget::cancel_signal);
connect(this,&Widget::clock_signal,this,&Widget::clock_slot);
connect(this,&Widget::cancel_signal,this,&Widget::cancel_slot);
// connect(this,&Widget::addtime_signal,this,&Widget::addtime_slot);
}
Widget::~Widget()
{
delete ui;
}
/********************************自定义槽函数******************************/
void Widget::close_slot()
{
QMessageBox box(QMessageBox::Question,
"闹钟","确认退出闹钟 ?",
QMessageBox::Yes|QMessageBox::Cancel,
this);
box.setButtonText(QMessageBox::Yes,"确认");
box.setButtonText(QMessageBox::Cancel,"取消");
//显示对话框
int res = box.exec();
if(res == QMessageBox::Yes)
{
this->close();
}else if(QMessageBox::Cancel)
{
box.close();
}
}
void Widget::action_slot()
{
//关闭文本编辑器
this->TimeEdit->setEnabled(false);
this->HintEdit->setEnabled(false);
//获取用户设置时间
UsrTime = TimeEdit->text();
//开启用户定时器
//UsrTimeTid = this->startTimer(500);
qDebug()<<"开启闹钟"<<UsrTime;
}
void Widget::cancel_slot()
{
Voicer->stop();
//打开文本编辑器
this->TimeEdit->setEnabled(true);
this->HintEdit->setEnabled(true);
}
void Widget::timerEvent(QTimerEvent *event)
{
//判断是否为自己的定时器
if(event->timerId() == SysTimeTid)
{
//在ui界面显示日期时间
SysTime = QDateTime::currentDateTime().toString("hh:mm:ss");
this->TimeLabel->setText(SysTime);
this->TimeLabel->setAlignment(Qt::AlignCenter);
this->TimeLabel->setStyleSheet("font-size: 20pt;");
qDebug()<<UsrTime;
qDebug()<<SysTime;
//判断是否为用户闹钟时间
if(SysTime == UsrTime)
{
qDebug()<<"闹钟";
emit clock_signal();
}
}
}
//闹钟触发槽函数
void Widget::clock_slot()
{
qDebug()<<"闹铃";
//获取文本框内容并朗读
QString Voice = this->HintEdit->toPlainText();
qDebug()<<Voice;
Voicer->say(Voice);
//弹出窗口
QMessageBox box(QMessageBox::Question,
"闹钟","五分钟后再提醒",
QMessageBox::Yes|QMessageBox::Cancel,
this);
box.setButtonText(QMessageBox::Yes,"确认");
box.setButtonText(QMessageBox::Cancel,"关闭");
//显示对话框
int res = box.exec();
if(res == QMessageBox::Yes)
{
box.close();
}else if(QMessageBox::Cancel)
{
emit cancel_signal();
box.close();
}
}
//void Widget::addtime_slot()
//{
// //增加时间
// UsrTime
//}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
this->move(event->globalPos() - temp);
}
void Widget::mousePressEvent(QMouseEvent *event)
{
//记录点击时鼠标的
temp = event->globalPos() - this->pos();
}
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}