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

news2025/1/16 1:23:46

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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_OBJECT

public:
    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 font
	QFont 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 value
	total = 1800;

	// set timer
	p_timer = new QTimer(this);
	connect(p_timer, SIGNAL(timeout()), this, SLOT(update()));
	p_timer->start(1000); // 1000 is interval
	display_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.coloradmin.cn/o/1345434.html

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

相关文章

电影《海王2》观后感

上周看了电影《海王2》&#xff0c;整体特效和打斗还是非常不错的&#xff0c;自己在写文章的时候&#xff0c;看完电影已经一周了&#xff0c;相当于是叙事自我在描述这段经历。 &#xff08;1&#xff09;体验自我VS叙事自我 首先简单说明下“体验自我”和“叙事自我”&…

Redis经典五大类型源码及底层实现(二)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术&#x1f525;如果感觉博主的文章还不错的…

Cuk、Zeta和Sepic开关电源拓扑结构

Cuk、Zeta和Sepic变换器,三种拓扑结构大致类似。不同点在于电感和二极管&#xff0c;MOS管的位置关系的变化。 Cuk电源是一种非隔离的直流电源转换器&#xff0c;其基本结构包括输入滤波电容、开关管、输入电感、输出电感和输出电容等元件。Cuk电路可以看作是Boost和Buck电路的…

【CFP-专栏2】计算机类SCI优质期刊汇总(含IEEE/Top)

一、计算机区块链类SCI-IEEE 【期刊概况】IF:4.0-5.0, JCR2区&#xff0c;中科院2区&#xff1b; 【大类学科】计算机科学&#xff1b; 【检索情况】SCI在检&#xff1b; 【录用周期】3-5个月左右录用&#xff1b; 【截稿时间】12.31截稿&#xff1b; 【接收领域】区块链…

基于轻量级GhostNet模型开发构建生活场景下生活垃圾图像识别系统

轻量级识别模型在我们前面的博文中已经有过很多实践了&#xff0c;感兴趣的话可以自行移步阅读&#xff1a; 《移动端轻量级模型开发谁更胜一筹&#xff0c;efficientnet、mobilenetv2、mobilenetv3、ghostnet、mnasnet、shufflenetv2驾驶危险行为识别模型对比开发测试》 《基…

Dragonfly-SM X9H核心板 SM6700Q PMIC供电配置烧录介绍

一、概述 核心板采用 1 片芯迈 SM6700Q PMIC 芯片搭配 3 片 MPQ8861 DCDC 电源芯片和 2 片安森美 LDO&#xff0c;型号分别 NCV8164ASN180T1G 和 NCV8130BMX080TCG 为系统供电。 二、核心板供电框图 系统供电主要是 MCU 的 RTC 域、安全域、应用域的供电&#xff0c;其中 RTC 域…

数据库中的锁

锁 锁冲突是针对事务的&#xff0c;另一个事务能不能申请上锁&#xff0c;是和其他事务竞争。 一个事务内部可以加很多锁&#xff0c;互相并不会冲突。 级联回滚调度 多个事务有依赖关系&#xff0c;如果一个事务回滚&#xff0c;那么所有事务也需要回滚。 冲突的数据加锁安…

118基于matlab的二级倒立摆的数学建模

基于matlab的二级倒立摆的数学建模&#xff0c;引入二次型最优控制率&#xff0c;对系统进行仿真分析&#xff0c;得出摆杆及小车位置变化曲线。程序已调通&#xff0c;可直接运行。

计算机网络——计算大题(七)

前言&#xff1a; 最近也是在准备计算机考试&#xff0c;我们的考试形式是上机考试&#xff0c;所以可能有些计算题是会给提供思路的&#xff0c;前面已经对本学期的计算机网络知识有了一个简单的认识与了解&#xff0c;现在我们就来对计算大题进行一个学习吧&#xff0c;这里的…

【Apache Doris】自定义函数之 JAVA UDF 详解

【Apache Doris】自定义函数之 JAVA UDF 详解 一、背景说明二、原理简介三、环境信息3.1 硬件信息3.2 软件信息 四、IDE准备五、JAVA UDF开发流程5.1 源码准备5.1.1 pom.xml5.1.2 JAVA代码 5.2 mvn打包5.2.1 clean5.2.2 package 5.3 函数使用5.3.1 upload5.3.2 使用 六、注意事…

Zookeeper无法启动,报“Unable to load database on disk”

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 问题描述&#xff1a; 测试环境部署zookeeper的服务器磁盘满了&#xff0c;引起服务异常&#xff0c;将zookeeper进程杀掉之后&…

【shell】命令行自动补全(compgen、complete、compopt)

目录 用途 小例子 说明 进阶-多级补齐 Bash自动补齐原理 用途 自编写的Shell脚本/命令&#xff0c;很多时候都需要输入一定的参数。当参数较多而且较复制的时候&#xff0c;如果能使用Tab键补全就显得非常的便利。 小例子 例如&#xff0c;我们自定义一个命令 footest function…

通信原理课设(gec6818) 007:语音识别

目录 1、去科大讯飞官网下载对应的sdk 2、科大讯飞文件夹的意思 3、配置ARM的录音环境 4、编程实现语音识别 我们的需求是将一个语音文件从客户端传到服务器&#xff0c;因此我们最好是选用tcp 现在市面上面常用的语音识别解决方案为&#xff1a;科大讯飞c和百度c 离…

机器学习归一化和标准化

1. 为什么做归一化和标准化 样本中有多个特征&#xff0c;每一个特征都有自己的定义域和取值范围&#xff0c;他们对距离计算也是不同的&#xff0c;如取值较大的影响力会盖过取值较小的参数。因此&#xff0c;为了公平&#xff0c;样本参数必须做一些归一化处理&#xff0c;将…

大创项目推荐 深度学习二维码识别

文章目录 0 前言2 二维码基础概念2.1 二维码介绍2.2 QRCode2.3 QRCode 特点 3 机器视觉二维码识别技术3.1 二维码的识别流程3.2 二维码定位3.3 常用的扫描方法 4 深度学习二维码识别4.1 部分关键代码 5 测试结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天…

springboot定时执行某个任务

springboot定时执行某个任务 要定时执行的方法加上Schedule注解 括号内跟 cron表达式 “ 30 15 10 * * &#xff1f;” 代表秒 分 时 日 月 周几 启动类上加上EnableScheduling 注释

最新GPT4教程,GPT语音对话使用,Midjourney绘画,ChatFile文档对话总结+DALL-E3文生图教程工具

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;文档对话总结DALL-E3文生图&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和…

【数据结构】八、查找

一、基本概念 静态查找&#xff1a;只查找&#xff0c;不改变集合内数据元素 动态查找&#xff1a;有则输出元素&#xff0c;无则添加元素 二、静态查找表 2.1顺序查找 在线性表、链表、树中依次查找 2.2折半查找&#xff08;二分查找&#xff09; 在有序的线性表中&…

HTML5+CSS3+JS小实例:过年3D烟花秀

实例:过年3D烟花秀 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><…

【机器学习合集】深度生成模型 ->(个人学习记录笔记)

深度生成模型 深度生成模型基础 1. 监督学习与无监督学习 1.1 监督学习 定义 在真值标签Y的指导下&#xff0c;学习一个映射函数F&#xff0c;使得F(X)Y 判别模型 Discriminative Model&#xff0c;即判别式模型&#xff0c;又称为条件模型&#xff0c;或条件概率模型 生…