QT: 用定时器完成闹钟的实现

闹钟项目:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTimerEvent>
#include <QTime>
#include <QDebug>
#include <QTextToSpeech>
#include <QMessageBox>
#include <QTimer>


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);   //要重写的关于定时器时间处理函数的声明

private slots:
    void on_startBtn_clicked();

    void on_stopBtn_clicked();

private:
    Ui::Widget *ui;

    QTextToSpeech *speecher;
    QTimer *timer;
    int tId;
};
#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);

    ui->hangEdit->setText("20-20-20");
    tId = startTimer(1000);
    this->timer = new QTimer;
    speecher = new QTextToSpeech(this);

}

Widget::~Widget()
{
    delete ui;

}

void Widget::timerEvent(QTimerEvent *e)
{
    if(e->timerId()==tId)
    {

    //获取系统时间
    QTime sys_time = QTime::currentTime();    //QTime类对象

    //将时间转化为字符串
    QString t = sys_time.toString("hh-mm-ss");


    //将字符串展示到ui界面
    ui->syslabel->setText(t);
    ui->syslabel->setAlignment(Qt::AlignCenter);

    if(ui->syslabel->text()==ui->hangEdit->text())
    {
        speecher->say(ui->tEdit->toPlainText());
    }

    }
}

void Widget::on_startBtn_clicked()
{
    if(ui->hangEdit->text()== NULL)
    {
        QMessageBox::critical(this,
                          "错误",
                          "请先编辑时间",
                          QMessageBox::Ok
                                 );
    }
    return;

    timer->start(100);
    ui->hangEdit->setReadOnly(true);
    ui->tEdit->setReadOnly(true);

}

void Widget::on_stopBtn_clicked()
{
    int ret  =   QMessageBox::question(this,
                          "提示",
                          "确定要停止闹钟吗?",
                          QMessageBox::Yes | QMessageBox::No);

    if(ret = QMessageBox::Yes)
    {
        timer->stop();
        ui->hangEdit->setReadOnly(false);
        ui->tEdit->setReadOnly(false);

        ui->hangEdit->clear();
    }

}

 

思维导图: 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/49496.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在本地git仓库查看远端的URL

右键调出选项栏 选择git-远端&#xff0c;选择远端的内容就可以看到URL了

大数据未来的前景怎么样?_光点科技

随着科技的迅猛发展和互联网的普及&#xff0c;大数据已成为当今社会中不可或缺的重要资源。大数据是指庞大而复杂的数据集合&#xff0c;这些数据通过高级计算技术进行处理和分析&#xff0c;可以揭示出有价值的信息和趋势。在过去几年中&#xff0c;大数据已经在各行各业产生…

JVM-类加载

1.了解冯诺依曼计算机结构 1.1计算机处理数据过程 (1)提取阶段:由输入设备把原始数据或信息输入给计算机存储器存起来 (2)解码阶段:根据CPU的指令集架构(ISA)定义将数值解译为指令 (3)执行阶段:再由控制器把需要处理或计算的数据调入运算器 (4)最终阶段:由输出设备把最后运…

一百三十七、Hive——HQL运行报错(持续更新中)

一、timestamp字段与int字段相加 &#xff08;一&#xff09;场景 change_time字段是timestamp字段&#xff0c;代表一个红绿灯周期的开始时间&#xff08;先是绿灯、再是黄灯、最后红灯&#xff09;&#xff0c;而green是int字段&#xff0c;代表绿灯的秒数&#xff0c;现在…

github前端开源json2html

软件介绍 前端低代码工具包&#xff0c;通过 JSON 配置就能生成各种页面。 应用场景 json解析超大数据动态渲染&#xff0c;渲染速度、性能解决问题 包引用列表 vue3 (cdn模式开发)element plusnodehttp-serveraxios 操作步骤 1.环境准备下载node&#xff1a;https://no…

【多任务编程-线程通信】

进程/线程通信的方式 某些应用程序中&#xff0c;进程/进程和线程/线程之间不可避免的进行通信&#xff0c;进行消息传递&#xff0c;数据共享等 同一进程的线程之间通信方式包括Windows中常用Event, Message等。 不同进程之间的通信可以利用Event, FileMapping(内存共享), W…

基于SSM+JSP+LayUI的宿舍管理系统

修正初始账号密码 默认账号&#xff1a;admin&#xff0c;默认密码&#xff1a;123456修复后台管理头像消失功能相对简单些&#xff0c;可能需要添加一些功能&#xff0c;需要源码免费提供需要运行服务、添加功能等联系我视频教程&#xff1a;【源码分享-Java系列】毕设 基于SS…

[NLP]使用Alpaca-Lora基于llama模型进行微调教程

Stanford Alpaca 是在 LLaMA 整个模型上微调&#xff0c;即对预训练模型中的所有参数都进行微调&#xff08;full fine-tuning&#xff09;。但该方法对于硬件成本要求仍然偏高且训练低效。 [NLP]理解大型语言模型高效微调(PEFT) 因此&#xff0c; Alpaca-Lora 则是利用 Lora…

【Kafka】消息队列Kafka进阶

目录 Kafka分区机制生产者分区写入策略轮询策略随机策略&#xff08;不用&#xff09;按key分配策略乱序问题自定义分区策略 消费者组Rebalance机制消费者分区分配策略Range范围分配策略RoundRobin轮询策略Stricky粘性分配策略 Kafka副本机制producer的ACKs参数acks配置为0acks…

Redis系列:Redis 的事务机制

1 复习下何为事务机制&#xff1f; Transaction&#xff08;事务&#xff09;是计算机的特有术语&#xff0c;它一般指单个逻辑工作单位&#xff0c;由一系列的操作组合而成&#xff0c;在这些操作执行的时候&#xff0c;要么都执行成功&#xff0c;要么都不执行&#xff0c;防…

okhttp原理分析

工程目录图 请点击下面工程名称&#xff0c;跳转到代码的仓库页面&#xff0c;将工程 下载下来 Demo Code 里有详细的注释 01okhttp module里 包含的设计模式&#xff1a;建造者设计模式、责任链设计模式 CustomInject 演示自定义注解 代码&#xff1a;okhttp原理分析、Andro…

transformer理解

transformer的理解 Q、K、V的理解 核心是自注意力机制。即每个位置的结果为所有位置的加权平均和。为了得到每个位置的权重,需要Q*K得到。 整个多头的self-attention过程 单个encoder encoder-decoder encoder中的K和V会传到decoder中的encoder-decoder attention中。 …

Docker 全栈体系(八)

Docker 体系&#xff08;高级篇&#xff09; 六、Docker轻量级可视化工具Portainer 1. 是什么 Portainer 是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便地管理Docker环境&#xff0c;包括单机环境和集群环境。 2. 安装 官网 https://www.portain…

第三章 数据链路层

第三章 数据链路层 3.1 数据链路层的几个基本概念 数据发送模型 数据链路层主要的两种信号类型 点对点信号&#xff1a;这种信道使用一对一的点对点通信方式&#xff1b;广播信道&#xff1a;这种信道使用一对多的广播方式&#xff0c;因此过程比较复杂。广播信道上连接的主机…

【【萌新的stm32学习-1】】

萌新的stm32学习 冯诺依曼结构 采用了分时复用的结构 优点&#xff1a;总线资源占用少 缺点&#xff1a;执行效率低 哈佛结构 执行效率高 总线资源占用多 RISC 这是精简指令集的意思 arm公司 ARMv9是2021年发布的最新 Cortex-A 最好高性能 Cortex-R 中 Cortex-M 低 何为STM…

八、Kafka时间轮与常见问题

Kafka与时间轮 Kafka中存在大量的延时操作。 1、发送消息-超时重试机制 2、ACKS 用于指定分区中必须要有多少副本收到这条消息&#xff0c;生产者才认为写入成功&#xff08;延时 等&#xff09; Kafka并没有使用JDK自带的Timer或者DelayQueue来实现延迟的功能&#xff0c;而…

实验室功率放大器怎么选择参数

实验室功率放大器是一种用于实验室研究和测试的电子设备&#xff0c;其主要功能是将微弱电信号放大到足够的水平以便进行研究和分析。在选择实验室功率放大器时&#xff0c;需要考虑多个参数&#xff0c;以便确保符合实验的需求。 以下是一些常见的实验室功率放大器参数和选择方…

工欲善其事必先利其器,IT工作电脑更要维护好

目录 一&#xff1a;电脑的组成 二&#xff1a;维护措施 三&#xff1a;助力记忆 一&#xff1a;电脑的组成 当谈到电脑主机时&#xff0c;我们通常指的是电脑的中央处理器(CPU)、内存、主板、电源、硬盘、显卡、声卡、网卡等核心部件组成的整体。这些部件共同协作&#xff…

探索单例模式:设计模式中的瑰宝

文章目录 常用的设计模式有以下几种&#xff1a;一.创建型模式&#xff08;Creational Patterns&#xff09;&#xff1a;二.结构型模式&#xff08;Structural Patterns&#xff09;&#xff1a;三.行为型模式&#xff08;Behavioral Patterns&#xff09;&#xff1a;四.并发…

基于ESP8266+网络调试助手点灯实验

文章目录 ESP8266串口wifi模块简介实验准备硬件接线程序下载注意事项总结 ESP8266串口wifi模块 简介 ESP8266 是一种低成本、高性能的 Wi-Fi 模块&#xff0c;内置了 TCP/IP 协议栈&#xff0c;它可以作为单独的无线网络控制器&#xff0c;或者与其他微控制器进行串口通信。它…