qt c++ 计时器 踩坑实录

目录

main.cpp

指针调用:

类调用踩坑实录

"countdownTimer.h"

"countdownTimer.cpp"


main.cpp

#include <QApplication>
#include <QLabel>
#include "CountdownTimer.h"int main(int argc, char *argv[])
{QApplication app(argc, argv);QLabel label;label.show();auto updateLabel = [&label](const QString &text) {label.setText(text);};int totalTime = 60000; // 设置倒计时为60秒CountdownTimer countdownTimer(updateLabel, totalTime);countdownTimer.start();return app.exec();
}

指针调用:

#include <QApplication>
#include <QLabel>
#include "CountdownTimer.h"int main(int argc, char *argv[])
{QApplication app(argc, argv);QLabel* label = new QLabel;  // label 是一个指针label->show();auto updateLabel = [label](const QString &text) {  // 使用捕获列表捕获label指针label->setText(text);  // 使用箭头操作符访问setText方法};int totalTime = 60000; // 设置倒计时为60秒CountdownTimer countdownTimer(updateLabel, totalTime);countdownTimer.start();int result = app.exec();delete label;  // 清理动态分配的内存return result;
}

类调用踩坑实录

如果在类里面调用,CountdownTimer不能是函数内变量,要写成类变量,否则函数结束,就被销毁了。计时器无效了。

    auto callback = std::bind(&Countwidget::updateLabel, this, std::placeholders::_1);int totalTime = 5000; // 设置倒计时为60秒countdownTimer=new CountdownTimer(callback, totalTime);countdownTimer->start();

"countdownTimer.h"

#ifndef COUNTDOWNTIMER_H
#define COUNTDOWNTIMER_H#include <QObject>
#include <QTimer>
#include <functional>
#include <QString>class CountdownTimer : public QObject
{Q_OBJECTpublic:CountdownTimer(std::function<void(const QString&)> updateCallback, int totalTime, QObject *parent = nullptr);void start();private:QTimer *timer;int remainingTime;std::function<void(const QString&)> updateCallback; // 回调函数代替直接 QLabel 操作void handleTimeout();
};#endif // COUNTDOWNTIMER_H

"countdownTimer.cpp"

#include "countdownTimer.h"CountdownTimer::CountdownTimer(std::function<void(const QString&)> updateCallback, int totalTime, QObject *parent) :QObject(parent), updateCallback(updateCallback), remainingTime(totalTime)
{timer = new QTimer(this);timer->setInterval(1000); // 设置定时器间隔connect(timer, &QTimer::timeout, this, &CountdownTimer::handleTimeout);
}void CountdownTimer::start()
{timer->start();
}void CountdownTimer::handleTimeout()
{if (remainingTime > 0) {// int minutes = remainingTime / 60000;int seconds = (remainingTime % (60000+1)) / 1000;// int milliseconds = remainingTime % 1000;// QString text = QString("%1:%2:%3")//                    .arg(minutes, 2, 10, QChar('0'))//                    .arg(seconds, 2, 10, QChar('0'))//                    .arg(milliseconds, 3, 10, QChar('0'));QString text = QString("%1").arg(seconds, 1, 10, QChar('0'));// QString text = QString("%1").arg(seconds, 2, 10, QChar('0'));//左边补0updateCallback(text); // 使用回调函数更新UIremainingTime -= 1000;} else {updateCallback("00:00:000"); // 通知结束timer->stop();}
}

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

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

相关文章

JAVA小知识21:单列集合顶层接口Collection的使用

一、Collection简介 Collection是单列集合的顶层接口&#xff0c;所有的单列集合都集成自Collection。 那么什么是单列集合呢&#xff1f;我们上篇文章提到了List与ArrayList&#xff0c;List就是单列集合&#xff0c;他是无需可重复单列集合的顶层抽象类&#xff0c;我们学…

定个小目标之刷LeetCode热题(22)

这道题最容易想的就是排序后再遍历&#xff0c;但是时间复杂度就不是O(n)了&#xff0c;所以还是得用更优的解法&#xff0c;直接看题解&#xff0c;它是使用了HashSet&#xff0c;遍历数组&#xff0c;对于每一个数x&#xff0c;如果不存在x - 1则进入内循环&#xff0c;否则跳…

适合小白学习的项目1906java Web智慧食堂管理系统idea开发mysql数据库web结构java编程计算机网页源码servlet项目

一、源码特点 java Web智慧食堂管理系统是一套完善的信息管理系统&#xff0c;结合java 开发技术和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 前段主要技术 bootstra…

C语言的网络编程

目录 引言 一、TCP/IP概述 1. TCP&#xff08;Transmission Control Protocol&#xff09; 2. UDP&#xff08;User Datagram Protocol&#xff09; 二、Socket编程基础 1. 服务器端 2. 客户端 三、URL与HTTP编程 1. 使用libcurl进行HTTP请求 表格总结 TCP/IP与Socke…

监控易监测对象及指标之:全面监控MongoDB 4数据库

随着大数据时代的来临&#xff0c;MongoDB作为一款高性能的NoSQL数据库&#xff0c;因其灵活的文档模型、水平扩展能力以及丰富的查询语言&#xff0c;已成为众多企业和开发者处理海量数据的首选工具。 断言是MongoDB内部错误检测的重要机制。监控易工具对MongoDB的断言情况进行…

3、进程管理

#什么是进程 进程是程序启动产生的可执行实例 #静态查看进程 ps aux #参数解释 -a 只能查看系统里面运行的所有终端进程 -u 显示进程拥有者 -x 显示系统内所有进程 -f 显示进程间的父子关系 #其中显示的列 VSZ 是进程占用的虚拟内存大小 RSS 是占用的物理大小 ps -ef #参数解释…

aop注解快速实现数据脱敏返回

说明&#xff1a; 公司之前数据接口数据管理不严格&#xff0c;很多接口的敏感数据都没有脱敏处理&#xff0c;直接返回给前端了&#xff0c;然后被甲方的第三方安全漏洞扫出来&#xff0c;老板要求紧急处理&#xff0c;常用的话在单个字段上加上脱敏注解会更加的灵活&#xf…

基于Quartus Prime18.1的安装与FPGA的基础仿真(联合Modelsim)教程

Quartus是一种美国科技公司Intel&#xff08;英特尔&#xff09;公司开发的FPGA&#xff08;现场可编辑门阵列&#xff09;设计编译软件&#xff0c;用作设计、仿真、综合和布局、支持多种编程语言&#xff0c;包括VHDL、Verilog等&#xff0c;并具有丰富的功能和工具库&#x…

SpringCloud学习笔记 - 1、Boot和Cloud版本选型

文章目录 前言需要&#xff08;学习/用到&#xff09;的技术SpringBoot版本的选择我们为什么要使用 Java 17&#xff0c;以及SpringBoot 3.2 呢&#xff1f; SpringCloud 版本的选择SpringCloud 命名规则Springcloud Alibaba 版本的选择如何确定Boot&#xff0c;Cloud&#xff…

C语言实现员工管理系统

员工管理系统 1. 题目要求 设计一个计算机程序&#xff0c;能够实现简单的员工管理功能。 每个员工的信息包括&#xff1a;编号、姓名、性别、出生年月、学历、职务、电话、住址等。系统的功能包括&#xff1a; 文件操作&#xff1a;将数据输出到文件中以及从文件中加载数据查询…

Next.js 加载页面及流式渲染(Streaming)

Next.js 加载页面及流式渲染&#xff08;Streaming&#xff09; 在现代的 Web 应用开发中&#xff0c;用户体验是至关重要的。快速响应的页面加载和流畅的用户界面可以显著提升用户的满意度。而加载页面&#xff08;Loading Page&#xff09;和流式渲染&#xff08;Streaming&…

大模型太贵?找找自己的原因好吧?

什么&#xff1f; 炼个大模型还嫌贵&#xff1f; 到底哪里贵了&#xff01;&#xff1f; 大模型算力贵&#xff1f;哪里贵了&#xff01;&#xff1f; 争先恐后训练大模型&#xff0c; 搞得现在“算力慌”“一卡难求”&#xff0c; 算力当然水涨船高了! “特供版”GPU又…

python format详解

一、format() 内置函数 format(value, format_spec) 其中format_spec参数必须是一个字符串类型的&#xff0c;否则会抛出 TypeError异常如果format_spec参数是一个空的字符串&#xff0c;且value没有实现 __format__(value, format_spec) 实例方法&#xff1b;则该函数结果与…

MYSQL、ORACLE、PostgreSQL数据库对象层次及权限管理对比

文章目录 前言一、PostgreSQL二、MySQL三、Oracle 前言 本文为出于自己扩展、比较、图形化的思维路径自行总结归纳&#xff0c;可能有些细节不太准确&#xff0c;欢迎指正。 MySQL、Oracle、PostgreSQL关系型数据库都有管理员用户、用户、权限管理、表函数索引等数据库对象&am…

hexo实战:(二)个人独立博客优化合集

前言 上次介绍了使用 HexoGitHub Pages&#xff0c;零成本搭建一个专属自己的独立博客网站。我觉得那篇文章是没有入门门槛的&#xff0c;不管你是什么行业&#xff0c;只要想打造个人 IP&#xff0c;又不太想受博客平台约束&#xff0c;那么读完后动手操作一下也能轻松完成。…

图片Base64编码

将图片进行base64编码 在线转换 加头转换并保存为txt import base64 def image_to_base64(image_path):with open(image_path, "rb") as img_file:# 读取图片文件img_data img_file.read()# 对图片数据进行base64编码base64_data base64.b64encode(img_data)# 将…

[vue3]组件通信

自定义属性 父组件中给子组件绑定属性, 传递数据给子组件, 子组件通过props选项接收数据 props传递的数据, 在模版中可以直接使用{{ message }}, 在逻辑中使用props.message defineProps defineProps是编译器宏函数, 就是一个编译阶段的标识, 实际编译器解析时, 遇到后会进行…

Oracle 是否扼杀了开源 MySQL

Oracle 是否无意中扼杀了开源 MySQL Peter Zaitsev是一位俄罗斯软件工程师和企业家&#xff0c;曾在MySQL公司担任性能工程师。大约15年前&#xff0c;当甲骨文收购Sun公司并随后收购MySQL时&#xff0c;有很多关于甲骨文何时“杀死MySQL”的讨论。他曾为甲骨文进行辩护&#…

【GD32F303红枫派使用手册】第十七节 USART-中断串口收发实验

17.1 实验内容 通过本实验主要学习以下内容&#xff1a; 使用中断进行串口收发 17.2 实验原理 前面章节中我们已经学习了串口的状态标志位&#xff0c;本实验就是使用TBE中断和RBNE中断来实现中断收发数据&#xff0c;实验原理是RBNE中断用来接受数据&#xff0c;IDLE中断用…

记录第一次edusrc挖掘

文章目录 一、前言二、漏洞说明截止目前已修复 一、前言 edusrc平台介绍 我们可以在关于页面看到edusrc的收录规则 现阶段&#xff0c;教育行业漏洞报告平台接收如下类别单位漏洞&#xff1a; 教育部 各省、自治区教育厅、直辖市教委、各级教育局 学校 教育相关软件 可以看到…