QT上位机开发(倒计时软件)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        倒计时软件是生活中经常遇到的一种场景。比如运动跑步,比如学校考试,比如论文答辩等等,只要有时间限制规定的地方,我们都会遇到倒计时的一些设备。目前在电商网站上面,可以找到很多这类的倒计时工具,不过既然我们学习了QT平台,那么完全可以用它来实现一个简单的倒计时软件。

        为了简单演示一下,我们设计了AA:BB的形式,其中AA代表分钟,BB代表秒。启动之后,每隔1s,BB会递减1,如果不够,就会从AA借数。等到AA和BB变成00之后,会有一个弹窗弹出来。整个逻辑就是这么一个过程。

1、设计界面

        界面部分前面也说过,就是使用AA:BB的部分来完成的。所以,为了方便,就直接用qt designer来设计即可,

        截图上来看,中间显示部分字体偏小。不过没有关系,这部分后期可以通过编码的方法来进行解决。

2、QtWidgetsApplication1.h中添加变量和回调函数

        所谓变量,主要就是定时器和初始值。而回调函数,则是每次定时器调用的子函数。这部分和之前的按钮回调函数一样,也是槽函数,所以也会多一个关键字slots。此外,我们把字符的更新动作也单独设计成了一个函数display_number。

#pragma once#include <QtWidgets/QMainWindow>
#include <QTimer>
#include "ui_QtWidgetsApplication1.h"class QtWidgetsApplication1 : public QMainWindow
{Q_OBJECTpublic:QtWidgetsApplication1(QWidget *parent = nullptr);~QtWidgetsApplication1();private:Ui::QtWidgetsApplication1Class ui;QTimer* p_timer;int total;void display_number();private slots:void update();
};

3、QtWidgetsApplication1.cpp功能实现

        要实现倒计时的功能,首先肯定要初始化好构造函数。前面我们说过,在类定义里面会添加一些变量,那么在类开始构造的时候,就要初始化这些变量,这就包括了定时器和初始值。另外,因为整体字体比较小,这里也一并处理了一下。

#include <QApplication>
#include <QPushButton>
#include <QMessageBox>
#include "QtWidgetsApplication1.h"QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);//set fontQFont ft;ft.setPointSize(20);ui.label_1->setFont(ft);ui.label_2->setFont(ft);ui.label_3->setFont(ft);ui.label_4->setFont(ft);ui.label_5->setFont(ft);// set total valuetotal = 1800;// set timerp_timer = new QTimer(this);connect(p_timer, SIGNAL(timeout()), this, SLOT(update()));p_timer->start(1000); // 1000 is intervaldisplay_number();
}// destructor function
QtWidgetsApplication1::~QtWidgetsApplication1()
{if (p_timer){delete p_timer;}
}

        如代码所示,这里创建了一个周期为1000ms的定时器,它的回调函数是update,初始值是1800。所以,根据这些信息,我们继续查看定时器的回调函数update,

// timeout callback function
void QtWidgetsApplication1::update()
{total -= 1;display_number();if (total == 0){p_timer->stop();delete p_timer;p_timer = NULL;QMessageBox::information(this, "tip", "Timeout!");}
}

        回调函数update的逻辑还是很清晰的,每1s递减1,直到数值为0结束。这个时候,停止定时器、删除定时器、跳出弹框。当然,每次更新数值后,更新数值也是必不可少的,所以这里还有一个display_number的函数。

// shou data here
void QtWidgetsApplication1::display_number()
{ui.label_1->setText(QString::number((total / 60) / 10));ui.label_2->setText(QString::number((total / 60) % 10));ui.label_3->setText(QString::number((total % 60) / 10));ui.label_4->setText(QString::number((total % 60) % 10));
}

        display_number的内容比较简单,首先计算分钟的十分位和个位,接着计算秒钟的十分位和个位。最后把这些数值贴到label1、label2、label3、label4上面,这样就达到了数值更新的效果。

4、测试和验证

        测试的话就比较简单,直接编译后启动即可。首先查看数字是否发生跳变。

        如果ok,再检验超时之后是否有弹窗,一切都没有问题的话就可以了。反之,就要回头debug,单步调试下,看看问题出在哪。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

21 UVM printer

uvm_printer 类提供了以不同格式打印 uvm_objects 的灵活性。我们已经讨论了使用 uvm_field_* 宏的 print() 方法&#xff0c;或者如果不使用 utils_begin/ end 宏&#xff0c;则编写 do_print() 方法。 UVM printer提供四种内置printer。 uvm_printeruvm_table_printeruvm_t…

Git:远程仓库的使用

查看当前的远程库 要查看当前配置有哪些远程仓库&#xff0c;可以用git remote 命令&#xff0c;它会列出每个远程库的简短名字。在克隆完某个项目后&#xff0c;至少可以看到一个名为origin 的远程库&#xff0c;Git 默认使用这个名字来标识你所克隆的原始仓库&#xff1a; 也…

DM达梦数据库表占用空间大小

问题描述&#xff1a; 项目涉及用户量大且数据量大&#xff0c;为提高查询性能采用分表方式处理数据&#xff1b;根据业务要求总共4张业务表&#xff0c;每张业务表扩展成100张表&#xff0c;系统中总共400张表。部署至测试环境发现测试环境占用的磁盘空间是开发环境的8倍。 问…

从程序员到项目经理

前言 看到这个话题&#xff0c;博主不禁有感而发。那么就简单讲讲&#xff0c;从程序员到项目经理&#xff0c;需要具备哪些必备能力或基本的素养。 一、必备 1、技术能力 程序员首先必须成为一个名合格的coder&#xff0c;有思想有见解有态度。 无论身处什么开发岗位&…

python2.x编码Unicode字符串

1 python2.x编码Unicode字符串 python2.x默认编码方法为ASCII码。字符串赋值时按系统默认编码自动编码&#xff0c;通过decode()方法解码为Unicode&#xff0c;再通过encode()方法编码为指定码。 1.1 编码解码基础知识 1.1.1 位 位(bit)是计算机存储数据的最小单位&#xf…

数据之光:乡镇企业的发展利器——数据可视化

数据可视化是一项强大的工具&#xff0c;它不仅在大型企业中发挥关键作用&#xff0c;而且在乡镇企业中也能作出显著贡献。那么&#xff0c;数据可视化究竟能为乡镇企业做出什么样的贡献呢&#xff1f; 首先&#xff0c;数据可视化为乡镇企业提供了更清晰的业务洞察。通过将庞大…

超简单实用,推荐的深度学习科研必备网站(轻松找论文,代码项目,写论文综述)

一个非常有用的深度学习必备网站 网址推荐 接触新方向需要了解的内容1.在某一个研究方向下&#xff0c;有哪些算法模型可以用&#xff1f;不同算法之间效果对比如何&#xff1f;2.在某一个研究方向下&#xff0c;到底有哪些论文&#xff0c;模型是可以用的&#xff1f;3.在某一…

Python中如何使用_new_实现单例模式

单例模式是一个经典设计模式&#xff0c;简要的说&#xff0c;一个类的单例模式就是它只能被实例化一次&#xff0c;实例变量在第一次实例化时就已经固定。 在Python中常见的单例模式有None&#xff0c;这就是一个很典型的设计&#xff0c;通常使用 if xxx is None或者if xxx …

ESP32S3+HX8347+3线SPI运行LVGL例程

一、clone lv_port_esp32到本地 git clone https://github.com/lvgl/lv_port_esp32.git 二、增加hx8347.c、hx8347.h components\lvgl_esp32_drivers\lvgl_tft下新增2个文件&#xff1a;hx8347.c、hx8347.h。因为lv_port_esp32中没有hx8347的驱动&#xff0c;需要自己写。这两个…

分库分表之Mycat应用学习二

3 Mycat 概念与配置 官网 http://www.mycat.io/ Mycat 概要介绍 https://github.com/MyCATApache/Mycat-Server 入门指南 https://github.com/MyCATApache/Mycat-doc/tree/master/%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%973.1 Mycat 介绍与核心概念 3.1.1 基本介绍 历史&#x…

怎么使用FTP

FTP服务器&#xff08;File Transfer Protocol Server&#xff09;是在互联网上提供文件存储和访问服务的计算机&#xff0c;它们依照FTP协议提供服务。FTP是File Transfer Protocol的缩写&#xff0c;即文件传输协议&#xff0c;是一种基于TCP的协议&#xff0c;采用客户/服务…

软件测试/测试开发丨Python 数据类 dataclass 学习笔记

dataclass 介绍 dataclass优势 可读性强操作灵活轻量 应用场景 创建对象完美融合平台开发 ORM 框架 案例 场景&#xff1a;如果创建一只猫&#xff0c;信息包括猫的名字、体重、颜色。同时打印这个对象的时候&#xff0c;希望能打印出一个字符串&#xff08;包含猫的各种信息&…

Python跨年烟花秀

写在前面 今年跨年怎么过呢~博主用python的pygame实现了一场炫酷的烟花秀&#xff0c;一起来看看吧&#xff01; 环境需求 python3.11.4及以上PyCharm Community Edition 2023.2.5pyinstaller6.2.0&#xff08;可选&#xff0c;这个库用于打包&#xff0c;使程序没有python环境…

图灵日记之java奇妙历险记--继承和多态

目录 继承概念继承语法父类成员访问子类中访问父类的成员变量子类中访问父类的成员方法 super关键字子类构造方法super和this初始化protected关键字继承方式final 关键字继承与组合 多态条件向上转型重写动态绑定&&静态绑定多态再理解向下转型多态的优缺点好处缺陷 继承…

【Transformer】深入理解Transformer模型2——深入认识理解(下)

前言 Transformer模型出自论文&#xff1a;《Attention is All You Need》 2017年 近年来&#xff0c;在自然语言处理领域和图像处理领域&#xff0c;Transformer模型都受到了极为广泛的关注&#xff0c;很多模型中都用到了Transformer或者是Transformer模型的变体&#xff0…

java springboot宠物医院管理系统

一.项目简介 宠物医院管理系统&#xff0c;java项目&#xff0c;springboot项目。eclipse和idea都能打开运行。 使用技术&#xff1a;springboot&#xff0c;mybatis&#xff0c;jsp&#xff0c;mysql 5.7 共分为三个角色&#xff1a;系统管理员、医生、用户 功能模块&…

9. 进程

9. 进程 1. 进程与程序1.1 main() 函数由谁调用1.2 程序如何结束1.2.1 注册进程终止处理函数 atexit() 1.3 何为进程1.4 进程号 2. 进程的环境变量2.1 应用程序中获取环境变量2.1.1 获取指定环境变量 2.2 添加/删除/修改环境变量2.2.1 putenv()2.2.2 setenv()2.2.3 命令行式添加…

springboot参数校验常用注解及分组校验

一、使用方式添加Validated 二、常见注解 Null 被注解的元素必须为null NotNull 被注解的元素必须不为null NotBlank 只能作用在接收的 String 类型上&#xff0c;注意是只能&#xff0c;不能为 null&#xff0c;而且调用 trim() 后&#xff0c;长度必须大于 0即&#xff…

在 Linux 中使用 cat 命令

cat 命令用于打印文本文件的文件内容。至少&#xff0c;大多数 Linux 用户都是这么做的&#xff0c;而且没有什么问题。 cat 实际上代表 “连接(concatenate)”&#xff0c;创建它是为了 合并文本文件。但只要有一个参数&#xff0c;它就会打印文件内容。因此&#xff0c;它是用…

【数据结构】双向带头循环链表的实现

前言&#xff1a;在前面我们学习了顺序表、单向链表&#xff0c;今天我们在单链表的基础上进一步来模拟实现一个带头双向链表。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:数据结构 &#x1f448; &#x1f4af;代码仓库:卫卫周大胖的…