QTimer 指针类型和引用类型使用的区别

2024-02-02 02:20

本文主要是介绍QTimer 指针类型和引用类型使用的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

QTimer *timer1 = new QTimer(this); //指针类型

QTimer timer2; //引用类型

这两种用法之间的主要区别在于对象的生命周期和存储位置。

1、动态分配内存的对象*timer1 :

QTimer在创建为 *timer1 指针类型时,一定要指定this为父类,即父类为当前窗体,否则在关闭或释放当前窗体后,QTimer还在运行,会引发程序异常。

这种方式创建了一个 QTimer 对象,并通过 new 运算符动态分配了内存。*timer1 这个对象的生命周期在你显式删除它之前,或者在使用 this 作为父对象并且在this 对象被销毁时才会结束。通常,在这种情况下,你需要在适当的时候(比如对象不再需要时或者类的析构函数中)使用delete 来释放这个对象,以避免内存泄漏。

QTimer *timer1 = new QTimer(this);

connect(timer1,&QTimer::timeout,[=](){

        qDebug()<<"timer1"<<ncount++;

});

timer1->start(1000);

  • 这是一个指向 QTimer 对象的指针。
  • 使用动态内存分配,需要在堆上创建 QTimer 对象。
  • 开发人员负责手动分配内存和释放内存,以避免内存泄漏。使用 new QTimer(parent)  delete timer1 

2、栈上的对象timer2:

QTimer在创建为 timer2 引用对象类型时,不需要指定父类,会自动销毁。

这种方式创建的 QTimer 对象是一个栈上的局部变量,其生命周期受限于定义它的作用域。当超出该对象所在作用域时(通常是函数结束时),对象会被自动销毁。因此,在这种情况下,你不需要手动释放内存或管理对象的生命周期。

但此种方式需要将 QTimer timer2;放在*.h头文件中,并且在头文件中引用 #include  <QTimer>,否则程序编译及运行不报错,但计时器不能执行。

在头文件中引用 #include <QTimer>

在头文件中声名 QTimer timer2;

在代码文件cpp中写代码:

connect(&timer2,&QTimer::timeout,[=](){

        qDebug()<<"timer2"<<ncount++;

});

timer2.start(1000);

  • 这是一个 QTimer 对象,其生命周期由它所属的作用域管理。
  • 对象在栈上创建,当它超出了其作用域时,会自动被销毁。
  • 不需要手动释放内存。

这篇关于QTimer 指针类型和引用类型使用的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/669201

相关文章

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St

Pydantic中Optional 和Union类型的使用

《Pydantic中Optional和Union类型的使用》本文主要介绍了Pydantic中Optional和Union类型的使用,这两者在处理可选字段和多类型字段时尤为重要,文中通过示例代码介绍的... 目录简介Optional 类型Union 类型Optional 和 Union 的组合总结简介Pyd

Vue3使用router,params传参为空问题

《Vue3使用router,params传参为空问题》:本文主要介绍Vue3使用router,params传参为空问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录vue3使用China编程router,params传参为空1.使用query方式传参2.使用 Histo

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

CSS Padding 和 Margin 区别全解析

《CSSPadding和Margin区别全解析》CSS中的padding和margin是两个非常基础且重要的属性,它们用于控制元素周围的空白区域,本文将详细介绍padding和... 目录css Padding 和 Margin 全解析1. Padding: 内边距2. Margin: 外边距3. Padd

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数