C++&QT-implementation of timer alarm clock

Table of contents

1.widget.h

2.widget.cpp

3.widget.ui

4. Run screenshot


1.widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTime> //  时间类
#include <QTimer> // 定时器类
#include <QTimerEvent> // 定时器事件
#include <QTextToSpeech> //语音播报类

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

protected:
    // 重写定时器事件处理函数
    void timerEvent(QTimerEvent *event) override;

private slots:

    // 启动按钮槽函数
    void on_start_btn_clicked();
    // 停止按钮槽函数
    void on_spot_btn_clicked();
    // 定时输入框槽函数
    void on_timer_edit_textChanged(const QString &arg1);
    // 播报文本框槽函数
    void on_textEdit_textChanged();


private:
    Ui::Widget *ui;

    QTimer *timer; // 定时器指针

    // 记录系统时间的定时器
    int sys_timer;

    // 记录定时时间的定时器
    int time_timer;

    QTextToSpeech *speech; // 语音组件指针
};
#endif // WIDGET_H

2.widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 实例化播报员
    speech = new QTextToSpeech(this);

    // 设置定时输入框提示文本
    ui->timer_edit->setPlaceholderText ("12:12:00");

    // 启动定时器
    sys_timer = this->startTimer (1000);// 当启动定时器后,每隔1000毫秒,会自动调用定时器事件处理函数

    // 设置启动按钮
    ui->start_btn->setEnabled (false); // 设置按钮不可用

    // 设置停止按钮
    ui->spot_btn->setEnabled (false); // 设置按钮不可用




}

Widget::~Widget()
{
    delete ui;
}


// 重写的定时器事件处理函数
void Widget::timerEvent(QTimerEvent *event)
{
    // 判断是否为系统时间定时器
    if (event->timerId () == sys_timer) {
        // 获取系统日期时间
        QDateTime sys_dt = QDateTime::currentDateTime ();

        // 将日期时间转换为字符串
        QString dt = sys_dt.toString ("yyyy.MM.dd hh:mm:ss");

        // 将日期时间显示到ui界面
        ui->sys_time->setText (dt);
        // 判断是否为定时框定时器
    } else if (event->timerId () == time_timer) {
        if (ui->sys_time->text ().right (8) == ui->timer_edit->text ()) {
            // 停止定时的定时器
            this->killTimer (time_timer); // 关闭定时器
            // 设置停止按钮为不可用
            ui->spot_btn->setEnabled (false);
            // 播报文本
            speech->say (ui->textEdit->toPlainText ());
        }

    }

}


// 定时输入框槽函数
void Widget::on_timer_edit_textChanged(const QString &arg1)
{
    // 判断定时输入框和播报文本框是否空
    if (arg1.isEmpty () || ui->textEdit->toPlainText ().isEmpty ()){
        ui->start_btn->setEnabled (false); // 空,设置登录按钮不可用
    } else {
        ui->start_btn->setEnabled (true); // 不空,设置登录按钮可用
    }
}

// 播报文本槽函数
void Widget::on_textEdit_textChanged()
{
    // 判断定时输入框和播报文本框是否空
    if (ui->timer_edit->text ().isEmpty () || ui->textEdit->toPlainText ().isEmpty ()){
        ui->start_btn->setEnabled (false); // 空,设置登录按钮不可用
    } else {
        ui->start_btn->setEnabled (true); // 不空,设置登录按钮可用
    }

}


// 启动按钮槽函数
void Widget::on_start_btn_clicked()
{
    // 启动定时器
    time_timer = this->startTimer (1000);// 当启动定时器后,每隔1000毫秒,会自动调用定时器事件处理函数
    // 设置启动按钮为不可用
    ui->start_btn->setEnabled (false);
    // 设置定时输入框为不可用
    ui->timer_edit->setEnabled (false);
    // 设置播报框不可用
    ui->textEdit->setEnabled (false);
    // 设置停止按钮为可用
    ui->spot_btn->setEnabled (true);

}

// 停止按钮槽函数
void Widget::on_spot_btn_clicked()
{
    // 设置停止按钮为不可用
    ui->spot_btn->setEnabled (false);
    // 设置启动按钮为可用
    ui->start_btn->setEnabled (true);
    // 停止定时的定时器
    this->killTimer (time_timer); // 关闭定时器
    // 设置定时输入框为可用
    ui->timer_edit->setEnabled (true);
    // 设置播报框可用
    ui->textEdit->setEnabled (true);
}




3.widget.ui

 

4. Run screenshot

 

Guess you like

Origin blog.csdn.net/liu319293960_/article/details/130436449