wight.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QTimer> //定时器
#include<QTime> //时间类
#include<QTimerEvent>
#include<QDateTime> //日期时间类
#include<cstring>
#include<QTextToSpeech>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_btn_start_clicked();
void my_timeout_slot();
void on_btn_stop_clicked();
protected:
void timerEvent(QTimerEvent* event) override;
private:
Ui::Widget *ui;
QTimer *timer;
int event_timer;
QTextToSpeech *speech;
};
#endif // WIDGET_H
wight.c
#include "widget.h"
#include "ui_widget.h"
#include<cstring>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//实例化读者
speech= new QTextToSpeech(this);
setWindowTitle("闹钟");
setWindowIcon(QIcon(":/new/1.png"));
setFixedSize(this->size());
ui->lineEdit->setPlaceholderText("yyyy/MM/dd hh:mm:ss");
//实例化对象版本
// timer = new QTimer(this);
//函数版本
event_timer = this->startTimer(1000); //启动定时器
//timer对象发射timeout信号
// connect(timer, &QTimer::timeout, this ,&Widget::my_timeout_slot);
}
Widget::~Widget()
{
delete ui;
}
//启动按钮
void Widget::on_btn_start_clicked()
{
if(ui->lineEdit->text()==nullptr)
{
//判断是否为空
ui->btn_start->setEnabled(true);
ui->btn_stop->setEnabled(false);
}else
{
//启动成功后除stop外设为不可用
ui->btn_start->setEnabled(false);
ui->btn_stop->setEnabled(true);
ui->lineEdit->setEnabled(false);
ui->textEdit->setEnabled(false);
}
}
//停止按钮
void Widget::on_btn_stop_clicked()
{
//设为可用
ui->btn_start->setEnabled(true);
ui->lineEdit->setEnabled(true);
ui->textEdit->setEnabled(true);
ui->btn_stop->setEnabled(false);
}
//重写的定时器时间处理函数
void Widget::timerEvent(QTimerEvent *event)
{
//判断时间ID
if(event->timerId() == event_timer)
{
//获取系统日期
QDateTime sys_dt = QDateTime::currentDateTime();
QString dt = sys_dt.toString("yyyy/MM/dd hh:mm:ss");
ui->label_time->setText(dt);
QString s = ui->lineEdit->text();
//判断时间是否一致
if(dt==s)
{
speech->say(ui->textEdit->toPlainText());
}
}
if(event->timerId() == 0)
{
}
}
实例化对象版槽函数
void Widget::my_timeout_slot()
{
// QDateTime sys_dt = QDateTime::currentDateTime();
// QString dt = sys_dt.toString("yyyy/MM/dd hh:mm:ss");
// ui->label_time->setText(dt);
// QString s = ui->lineEdit->text();
// 判断时间是否一致
// if(dt==s)
// {
// speech->say(ui->textEdit->toPlainText());
// }
}
ui.h
/********************************************************************************
** Form generated from reading UI file 'widget.ui'
**
** Created by: Qt User Interface Compiler version 5.14.2
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_WIDGET_H
#define UI_WIDGET_H
#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QTextEdit>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_Widget
{
public:
QLabel *label_time;
QLineEdit *lineEdit;
QPushButton *btn_start;
QPushButton *btn_stop;
QTextEdit *textEdit;
void setupUi(QWidget *Widget)
{
if (Widget->objectName().isEmpty())
Widget->setObjectName(QString::fromUtf8("Widget"));
Widget->resize(800, 600);
label_time = new QLabel(Widget);
label_time->setObjectName(QString::fromUtf8("label_time"));
label_time->setGeometry(QRect(60, 60, 311, 151));
lineEdit = new QLineEdit(Widget);
lineEdit->setObjectName(QString::fromUtf8("lineEdit"));
lineEdit->setGeometry(QRect(390, 50, 351, 61));
btn_start = new QPushButton(Widget);
btn_start->setObjectName(QString::fromUtf8("btn_start"));
btn_start->setGeometry(QRect(390, 170, 121, 51));
btn_stop = new QPushButton(Widget);
btn_stop->setObjectName(QString::fromUtf8("btn_stop"));
btn_stop->setGeometry(QRect(640, 170, 111, 51));
textEdit = new QTextEdit(Widget);
textEdit->setObjectName(QString::fromUtf8("textEdit"));
textEdit->setGeometry(QRect(50, 270, 701, 261));
retranslateUi(Widget);
QMetaObject::connectSlotsByName(Widget);
} // setupUi
void retranslateUi(QWidget *Widget)
{
Widget->setWindowTitle(QCoreApplication::translate("Widget", "Widget", nullptr));
label_time->setText(QString());
btn_start->setText(QCoreApplication::translate("Widget", "\345\220\257\345\212\250", nullptr));
btn_stop->setText(QCoreApplication::translate("Widget", "\345\201\234\346\255\242", nullptr));
} // retranslateUi
};
namespace Ui {
class Widget: public Ui_Widget {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_WIDGET_H
运行图