当前位置: 首页 > article >正文

QTday5

Label上显示系统时间,程序运行就要有。
Lable2,:请输入闹钟的事件 行编辑器和启动按钮。启动按钮之后,到了行编辑器内的时间后,就开始语音播报最下方label中的内容。
语音播报5次
在这里插入图片描述

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QDebug>
#include <QTime>           // 时间类
#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();

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

private slots:
    void on_timerPB_clicked();    // 启动定时器的槽函数

private:
    Ui::Widget *ui;
    int id;           // 定时器1的ID(系统时间)
    int id2;          // 定时器2的ID(闹钟定时器)
    QTextToSpeech *speecher; // 语音播报器对象
};

#endif // WIDGET_H

 widget.cpp

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

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
    , speecher(new QTextToSpeech(this)) // 初始化语音播报器
{
    ui->setupUi(this);

    // 显示当前系统时间到 systimeLab
    QString t = QTime::currentTime().toString("hh:mm:ss"); // 获取当前系统时间并格式化为字符串
    ui->systimeLab->setText("系统时间:" + t); // 将当前时间显示在 systimeLab 标签上
    ui->systimeLab->setAlignment(Qt::AlignCenter); // 设置标签文本居中显示

    // 启动一个 1 秒间隔的定时器,用于实时更新系统时间
    id = startTimer(1000); // 定时器以 1 秒为间隔触发
}

Widget::~Widget()
{
    delete ui; // 释放 UI 资源
}

// 定时器事件处理函数
void Widget::timerEvent(QTimerEvent *e)
{
    // 判断是否为系统时间更新的定时器
    if (e->timerId() == id)
    {
        // 实时更新系统时间
        QTime sys_time = QTime::currentTime();       // 获取当前时间
        QString t = sys_time.toString("hh:mm:ss");   // 转换为 "hh:mm:ss" 格式的字符串
        ui->systimeLab->setText(t);                 // 更新 systimeLab 标签显示时间
    }
    // 判断是否为闹钟触发的定时器
    else if (e->timerId() == id2)
    {
        // 获取用户输入的文本内容
        QString textToSpeak = ui->txtLab->text(); // 从 txtLab 文本框中获取需要播报的文本内容

        // 循环播报文本三遍
        for (int i = 0; i < 3; ++i)
        {
            speecher->say(textToSpeak);           // 使用 QTextToSpeech 播报文本内容
            qDebug() << "语音播报第" << (i + 1) << "次:" << textToSpeak; // 在调试输出中记录播报次数和内容
        }

        // 关闭闹钟定时器
        killTimer(id2); // 停止闹钟定时器
        id2 = 0;        // 将闹钟定时器 ID 重置为 0

        // 在事件标签中显示提示信息
        ui->eventLab->setText("闹钟触发,已播报三遍!"); // 在 eventLab 标签中显示提示信息
        ui->eventLab->setAlignment(Qt::AlignCenter);      // 设置标签文本居中显示
    }
}

// 启动定时器按钮的槽函数
void Widget::on_timerPB_clicked()
{
    // 获取用户设置的目标时间
    QString t1 = ui->lineEdit->text(); // 从 lineEdit 输入框中读取用户输入的时间
    QTime time1 = QTime::currentTime(); // 获取当前时间
    QTime time2 = QTime::fromString(t1, "hh:mm:ss"); // 将用户输入的时间转换为 QTime 对象

    // 检查用户输入的时间是否有效
    if (!time2.isValid() || time1 >= time2) // 检查时间格式是否正确,且目标时间晚于当前时间
    {
        qDebug() << "输入时间无效或早于当前时间"; // 输出调试信息
        ui->eventLab->setText("时间无效,请输入有效时间!"); // 在 eventLab 标签中提示用户输入错误
        ui->eventLab->setAlignment(Qt::AlignCenter);       // 设置标签文本居中显示
        return; // 退出函数,不设置定时器
    }

    // 计算当前时间与目标时间的时间差(以毫秒为单位)
    int cha = time1.msecsTo(time2); // 计算目标时间与当前时间之间的毫秒数差
    qDebug() << "相差毫秒数:" << cha; // 输出调试信息,显示时间差

    // 启动闹钟定时器
    id2 = startTimer(cha); // 设置定时器,超时时间为目标时间与当前时间的差值
    ui->eventLab->setText("闹钟已设置!"); // 在 eventLab 标签中提示闹钟已设置
    ui->eventLab->setAlignment(Qt::AlignCenter); // 设置标签文本居中显示
    qDebug() << "闹钟设置成功,间隔时间:" << cha / 1000 << "秒"; // 输出调试信息,显示闹钟触发间隔
}


http://www.kler.cn/a/459788.html

相关文章:

  • TCP 演进之路:软硬件跷跷板与新征程
  • Linux之ARM(MX6U)裸机篇----9.GPIO中断实验
  • 推荐系统的三道菜
  • stm32入门元件介绍
  • 【2025最新计算机毕业设计】基于Spring Boot+Vue影院购票系统(高质量源码,提供文档,免费部署到本地)
  • 力扣hot100——贪心
  • 数据结构与算法Python版 图的应用与广度优先搜索
  • SQL 实战:日期与时间函数 – 统计数据的时间跨度与趋势
  • CSS系列(45)-- Scope详解
  • 谷歌浏览器的网页安全检测功能
  • Flutter快速动态生成APP启动图标logo的便捷方式
  • 代码随想录Day56 108. 冗余连接,109. 冗余连接II。
  • 自学记录HarmonyOS Next的HMS AI API 13:语音合成与语音识别
  • C语言控制台AI五子棋
  • IP组播基础
  • Kubernetes 的资源管理方式(二)
  • Ubuntu网络配置(桥接模式, nat模式, host主机模式)
  • 医疗数仓Hive安装部署
  • Spring cloud GateWay入门
  • 江科大学习笔记之——标准库以及其HAL库LED流水灯
  • Docker--Bitnami/kibana
  • 检索分析服务 Elasticsearch版
  • 搭建android开发环境 android studio
  • 闲谭Scala(3)--使用IDEA开发Scala
  • 专业140+总分410+南京大学851信号与系统考研经验南大电子信息通信集成电路,真题,大纲。参考书。
  • 数据库锁的深入探讨