配置文件
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.hFORMS += \widget.ui# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
头文件
widght.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QDebug>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QTextEdit>
#include <QTextToSpeech>
#include <QTimer>
#include <QDateTime>
#include <QThread>
#include <QTimerEvent>
//#include <QMediaPlayer>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;private:Ui::Widget *ui;//定义一个lable指针, 当前时间QLabel *current_time_lab;//定义一个行编辑器指针, 闹钟QLineEdit *clock_edit;//定义一个按钮指针, 启动QPushButton *start_clock_btn;//定义一个停止闹钟, 关闭QPushButton *stop_clock_btn;//定义一个文本编辑器QTextEdit *text_edit;//定义一个闹钟语音播放者QTextToSpeech *clock_speecher;//定义一个定时器指针QTimer *clock_timer;QTimer *clock_timer2;int time_id;public slots:void start_slot();void cklock_slot();void stop_slot();};
#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"
#include "ui_widget.h"int flag = 0;
int clock_flag = 0;
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//组件实例化current_time_lab = new QLabel(this);clock_edit = new QLineEdit(this);start_clock_btn = new QPushButton("启动", this);stop_clock_btn = new QPushButton("停止", this);text_edit = new QTextEdit(this);clock_speecher = new QTextToSpeech();clock_timer = new QTimer(this);clock_timer2 = new QTimer(this);//设置页面布局//固定窗口大小this->setFixedSize(500,400);//this->setStyleSheet("background-img");current_time_lab->resize(300, 70);current_time_lab->move(40,30);current_time_lab->setStyleSheet("background-color:rgba(137, 199, 117, 0.7);font:幼圆; font-size:26px;");current_time_lab->setAlignment(Qt::AlignCenter);clock_edit->resize(100, 30);//clock_edit->setPlaceholderText("定时时间");clock_edit->move(this->width()-140, 30);clock_edit->setAlignment(Qt::AlignHCenter);start_clock_btn->resize(45, 30);start_clock_btn->move(clock_edit->x(), clock_edit->y()+40);start_clock_btn->setStyleSheet("font:幼圆; font-size:10px; padding:2px");stop_clock_btn->resize(start_clock_btn->size());stop_clock_btn->move(start_clock_btn->x()+55, start_clock_btn->y());stop_clock_btn->setStyleSheet("font:幼圆; font-size:10px; padding:2px");text_edit->resize(this->width()-80, 220);text_edit->move(current_time_lab->x(), current_time_lab->y()+current_time_lab->height()+40);stop_clock_btn->setDisabled(true);clock_timer->start(1000);connect(clock_timer, &QTimer::timeout, this, [&](){QDateTime date_time = QDateTime::currentDateTime();current_time_lab->setText(date_time.toString("yyyy-MM-dd hh:mm:ss"));QTime currenttime = QTime::currentTime();QString time = currenttime.toString("hh:mm:ss");if(time <= clock_edit->text()){clock_flag = 0;}});connect(clock_timer, &QTimer::timeout, this, &Widget::cklock_slot);connect(start_clock_btn, &QPushButton::clicked, this, &Widget::start_slot);connect(stop_clock_btn, &QPushButton::clicked, this, &Widget::stop_slot);//time_id = startTimer(0);}Widget::~Widget()
{delete ui;
}void Widget::start_slot()
{start_clock_btn->setEnabled(false);stop_clock_btn->setEnabled(true);clock_edit->setDisabled(true);}void Widget::cklock_slot()
{if(!start_clock_btn->isEnabled()){QTime currenttime = QTime::currentTime();QString time = currenttime.toString("hh:mm:ss");if(time >= clock_edit->text()&& clock_flag == 0){if(flag == 0){clock_speecher->say(text_edit->toPlainText());clock_timer2->start(2000);connect(clock_timer2, &QTimer::timeout, [](){flag = 0;});}flag =1;}}elseclock_speecher->stop();}void Widget::stop_slot()
{//clock_speecher->stop();start_clock_btn->setEnabled(true);stop_clock_btn->setEnabled(false);clock_edit->setEnabled(true);clock_flag = 1;
}//定时器事件处理函数的实现
void Widget::timerEvent(QTimerEvent *event)
{if(event->timerId() == time_id){//static int num = 0;//ui->eventtime->setNum(++num); //setNum()函数是设置文本内容数字QDateTime sys_dt = QDateTime::currentDateTime(); //获取当前系统的日期时间this->current_time_lab->setText(sys_dt.toString("yyyy-MM-dd hh:mm:ss"));this->current_time_lab->setAlignment(Qt::AlignCenter);if(!start_clock_btn->isEnabled()){QTime currenttime = QTime::currentTime();QString time = currenttime.toString("hh:mm:ss");if(time == clock_edit->text()){
// if(flag == 0)
// {clock_speecher->say(text_edit->toPlainText());// clock_timer2->start(2000);// connect(clock_timer2, &QTimer::timeout, [](){// flag = 0;});//}//flag =1;}}elseclock_speecher->stop();}
}
Qt简易闹钟