本文主要是介绍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 指针类型和引用类型使用的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!