1>实现闹钟功能
----------------------------------------------------------------------
.pro
----------------------------------------------------------------------
QT += core gui texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \widget.cppHEADERS += \widget.h# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
----------------------------------------------------------------------
.h
----------------------------------------------------------------------
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QTextEdit>
#include <QPushButton>
#include <QTimer>
#include <QTime>
#include <QTextToSpeech>
#include <QMouseEvent>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void Localtime();void Clock_check();void Opbtn_Cli();void Clobtn_Cli();void mousePressEvent(QMouseEvent *event) override;void mouseMoveEvent(QMouseEvent *event) override;private://显示实施时间定时器QTimer *loct;QTimer *clotime;//界面组件QLabel *loctimlab;QLineEdit *clocklab;QPushButton *opbtn;QPushButton *clobtn;QTextEdit *txt;//时间比较int lhour = 0;int lmin = 0;int lsec = 0;int chour = 0;int cmin = 0;int csec = 0;//鼠标位置QPoint clipos;QPoint movpos;//播报员QTextToSpeech *sp = new QTextToSpeech(this);};
#endif // WIDGET_H
----------------------------------------------------------------------
main.cpp
----------------------------------------------------------------------
#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}
----------------------------------------------------------------------
widget.cpp
----------------------------------------------------------------------
#include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent)
{this->setWindowFlag(Qt::FramelessWindowHint);this->resize(700,500);this->setStyleSheet("background-color:skyblue");this->setWindowOpacity(0.8);//创建显示当前时间文本框loctimlab = new QLabel(this);loctimlab->move(50,50);loctimlab->resize(350,100);loctimlab->setAlignment(Qt::AlignCenter);QFont ff;ff.setPointSize(20);loctimlab->setFont(QFont(ff));//创建定时时间文本框clocklab = new QLineEdit(this);clocklab->move(loctimlab->x()+loctimlab->width()+50,loctimlab->y());clocklab->resize(200,45);ff.setPointSize(16);clocklab->setAlignment(Qt::AlignHCenter);clocklab->setFont(QFont(ff));clocklab->setText("00 : 00 : 00");//创建开启按钮opbtn = new QPushButton(this);opbtn->move(clocklab->x(),clocklab->y()+clocklab->height()+10);opbtn->resize(75,45);opbtn->setText("开启");connect(opbtn,&QPushButton::clicked,this,&Widget::Opbtn_Cli);//创建停止按钮clobtn = new QPushButton(this);clobtn->move(clocklab->x()+opbtn->width()+50,clocklab->y()+clocklab->height()+10);clobtn->resize(75,45);clobtn->setText("停止");clobtn->setEnabled(0);connect(clobtn,&QPushButton::clicked,this,&Widget::Clobtn_Cli);//创建提示文本框txt = new QTextEdit(this);txt->move(loctimlab->x(),loctimlab->y()+loctimlab->height()+50);txt->resize(600,250);txt->setText("knocking!!!");//实例化定时器loct = new QTimer(this);loct->start(1000);clotime = new QTimer(this);//连接定时器与槽函数connect(loct,&QTimer::timeout,this,&Widget::Localtime);connect(clotime,&QTimer::timeout,this,&Widget::Clock_check);
}Widget::~Widget()
{
}//获取实时时间
void Widget::Localtime()
{//获取实时时间QTime ltime = QTime::currentTime();//把时间显示到文本框上Widget::loctimlab->setText(ltime.toString("hh : mm : ss"));//获取时间lhour = ltime.hour();lmin = ltime.minute();lsec = ltime.second();}//时间比较
void Widget::Clock_check()
{if(lhour == chour && lmin == cmin && lsec == csec){//阅读文本内容sp->say(txt->toPlainText());}
}//开启闹钟定时
void Widget::Opbtn_Cli()
{//启动定时器clotime->start(1000);//获取定时时间QString tt;QByteArray t;QByteArray tmp;tt = clocklab->text();t = tt.toUtf8();int j = 0;//获取小时数for(int i = 0;t[j] != ':';i++,j++){tmp[i] = t[j];}j++;chour = atoi(tmp);//获取分钟数for(int i = 0;t[j] != ':';i++,j++){tmp[i] = t[j];}j++;cmin = atoi(tmp);//获取秒数for(int i = 0;t[j] != ':';i++,j++){tmp[i] = t[j];}j++;csec = atoi(tmp);//设置其他为不可用opbtn->setEnabled(0);clocklab->setEnabled(0);txt->setEnabled(0);clobtn->setEnabled(1);}//停止按钮
void Widget::Clobtn_Cli()
{//设置按钮可用opbtn->setEnabled(1);clocklab->setEnabled(1);txt->setEnabled(1);clobtn->setEnabled(0);//停止定时器clotime->stop();
}void Widget::mousePressEvent(QMouseEvent *event)
{if(event->buttons() == Qt::LeftButton){clipos = event->pos();}else{this->close();}
}void Widget::mouseMoveEvent(QMouseEvent *event)
{this->move(event->globalPos()-clipos);
}