闹钟作业

该代码段展示了一个基于Qt的Widget类,使用QTimer事件处理系统时间和用户设定的定时器。当定时时间到达时,程序通过QTextToSpeech进行语音播报。此外,界面包含启动、停止按钮以及输入框,用于设置和控制定时任务。
摘要由CSDN通过智能技术生成

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);
}

 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值