QT实现闹钟

QT实现闹钟

要求如下

在这里插入图片描述
在这里插入图片描述

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QDebug>
#include <QTimer>   //定时器类
#include <QTime>    //时间类
#include <QTextToSpeech>    //播报者头文件
#include <QTimerEvent>   //定时器事件类
#include <QDateTime>     //日期时间类

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

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

private slots:
    void LCD_Show();

    void on_StartBtn_clicked();

    void on_CloseBtn_clicked();

private:
    Ui::Widget *ui;

//     定义LCD屏时间显示的定时器
    QTimer *lcd_time;

//     定义一个bool类型变量:实现:以秒闪烁
    bool ShowFlag = true;

//     定义文本输入框的播报者
    QTextToSpeech *Text_Speech;

//     定义闹钟定时器
    int clock_time;

//     定义重复播报定时器
    int Respeech_time;
};
#endif // WIDGET_H




widget.cpp

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

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

//     设置固定尺寸
    this->setFixedSize(800,600);

//     更改窗口标题
    this->setWindowTitle("闹钟");

//    给LCD屏定时器实例化对象
    lcd_time = new QTimer(this);

//     将timeout信号与处理的槽函数连接
    connect(lcd_time,&QTimer::timeout,this,&Widget::LCD_Show);

//     启动LCD屏定时器
    lcd_time->start(1000);

//     设置取消按钮为不可用状态
    ui->CloseBtn->setEnabled(false);

//     实例化文本输入框的播报者
    Text_Speech = new QTextToSpeech(this);
}

Widget::~Widget()
{
    delete ui;
}
//将系统时间在DateLcd上显示
//获取系统当前时间
// LCD屏显示时间的槽函数
void Widget::LCD_Show()
{
//     获取当前系统时间
    QTime sys_time = QTime::currentTime();

//     将当前系统时间转化为字符串
    QString string_time = sys_time.toString("hh:mm");

//     实现:以秒闪烁
    if(ShowFlag)
    {
        string_time[2] = ':';
        ShowFlag = false;
    }else {
        string_time[2] = ' ';
        ShowFlag = true;
    }


//全局
//     展示到ui界面
    ui->DateLcd->display(string_time);




}
//输入数据到lineEdit,然后读取lineEdit的内容,判断是否触发“停止”按钮的状态
//点击“开始”按钮,每秒都与系统时间比较,刷新状态,相同触发语音播报“textedit”的内容
//同时判断“停止”按钮是否触发,若触发则停止播报。
// 启动按钮对应的槽函数
void Widget::on_StartBtn_clicked()
{
//     设置启动按钮为不可用状态
    ui->StartBtn->setEnabled(false);

//     设置取消按钮为可用状态
    ui->CloseBtn->setEnabled(true);

//     设置文本输入框为不可用状态
    ui->textEdit->setEnabled(false);

//     设置时间输入框为不可用状态
    ui->DateEdit->setEnabled(false);

//     启动闹钟定时器
    clock_time = this->startTimer(1000);//每间隔1秒启动一下定时器对应的函数
}
//停止按钮,两种状态:
//lineedit无内容为不可点击状态;
//输入时间格式正确,按钮变更为可以点击状态
// 取消按钮对应的槽函数
void Widget::on_CloseBtn_clicked()
{
//     设置启动按钮为可用状态
    ui->StartBtn->setEnabled(true);

//     设置取消按钮为不可用状态
    ui->CloseBtn->setEnabled(false);

//     设置文本输入框为可用状态
    ui->textEdit->setEnabled(true);

//     设置时间输入框为可用状态
    ui->DateEdit->setEnabled(true);

//     关闭重复播报定时器
    this->killTimer(Respeech_time);

//     清空时间数据输入框
    ui->DateEdit->clear();

//     清空文本数据输入框
    ui->textEdit->clear();

//     停止语音播报
    Text_Speech->stop();
}

//重写时间发生事件实时更新状态
//获取系统时间
void Widget::timerEvent(QTimerEvent *event)
{
    if(event->timerId() == clock_time)
    {
//         获取当前系统时间
        QTime sys_time = QTime::currentTime();

//        将当前系统时间转化为时间字符串
        QString string_time = sys_time.toString("hh:mm");//选用类型为lcd 只能显示5位数据

//         与时间输入框中的数据对比
        if(string_time == ui->DateEdit->text())
        {
//             关闭闹钟定时器
            this->killTimer(clock_time);

//             启动重复播报定时器
            Respeech_time = this->startTimer(5000);

//             语音播报起床文本内容
            Text_Speech->say(ui->textEdit->toPlainText());
        }
    }
    if(event->timerId() == Respeech_time)
    {
//         每隔5秒语音播报起床文本内容
        Text_Speech->say(ui->textEdit->toPlainText());
    }

}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值