1>实现闹钟功能
----------------------------------------------------------------------
.pro
----------------------------------------------------------------------
QT += core gui texttospeech
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += 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.0
SOURCES += \
main.cpp \
widget.cpp
HEADERS += \
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_OBJECT
public:
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);
}