社区
Qt
帖子详情
closeEvent()和析构函数?
addfourliu
2012-07-11 04:32:23
最近在调试bug,关闭程序的时候,虚构函数进不去,不知道怎么回事?
但是用closeEvent()可以响应,于是试着将析构函数中的内容放到closeEvent中,但是此时,子类的析构函数执行了不止一遍,当然在第二遍的时候,就崩溃掉了。。。
...全文
444
9
打赏
收藏
closeEvent()和析构函数?
最近在调试bug,关闭程序的时候,虚构函数进不去,不知道怎么回事? 但是用closeEvent()可以响应,于是试着将析构函数中的内容放到closeEvent中,但是此时,子类的析构函数执行了不止一遍,当然在第二遍的时候,就崩溃掉了。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
addfourliu
2012-07-12
打赏
举报
回复
[Quote=引用 8 楼 的回复:]
你的理解是正确的,当A被delete的时候会进入析构。由于B没有指定父对象,所以必须在析构里面手动删除,至于closeEvent与析构执行顺序是先执行closeEvent然后执行析构。
[/Quote]
谢谢啦!继续断点测试,什么地方异常关闭。。。
xiebin133
2012-07-12
打赏
举报
回复
[Quote=引用 6 楼 的回复:]
引用 5 楼 的回复:
引用 2 楼 的回复:
看看是不是因为某个parent-child关系导致某个object被销毁了两次?
引用 3 楼 的回复:
一个变量的生命周期结束了,就被析构了
注意在Qt里面,一个parent变量结束了,他所有的child变量也会被析构
你说的在parent中删两次是调用的啥函数删除?
“parent结束了”是什么意思呢? 我没有在pare……
[/Quote]
你的理解是正确的,当A被delete的时候会进入析构。由于B没有指定父对象,所以必须在析构里面手动删除,至于closeEvent与析构执行顺序是先执行closeEvent然后执行析构。
addfourliu
2012-07-12
打赏
举报
回复
问题仍为解决。。。。
addfourliu
2012-07-11
打赏
举报
回复
[Quote=引用 5 楼 的回复:]
引用 2 楼 的回复:
看看是不是因为某个parent-child关系导致某个object被销毁了两次?
引用 3 楼 的回复:
一个变量的生命周期结束了,就被析构了
注意在Qt里面,一个parent变量结束了,他所有的child变量也会被析构
你说的在parent中删两次是调用的啥函数删除?
[/Quote]
“parent结束了”是什么意思呢? 我没有在parent中对child进行删除,我是想在析构函数中对child进行删除。
我是这样理解的,可能不对:
比如:class A :public QDialog,我在A中new了一个B,B没有指定父对象。以我的理解,当我关闭Dialog窗口的时候,程序会进入到~A(){} 中,所以我在~A(){}中通过 delete B;将B给删除掉。
zhu_xz
2012-07-11
打赏
举报
回复
[Quote=引用 3 楼 的回复:]
一个程序运行到什么时候,才会进入它的析构函数呢?!
main()函数执行完毕?还是关闭改程序?
[/Quote]
一个变量的生命周期结束了,就被析构了
注意在Qt里面,一个parent变量结束了,他所有的child变量也会被析构
你说的在parent中删两次是调用的啥函数删除?
addfourliu
2012-07-11
打赏
举报
回复
[Quote=引用 2 楼 的回复:]
看看是不是因为某个parent-child关系导致某个object被销毁了两次?
[/Quote]
是不是我在parent中删除child两次,就会执行child的析构函数两次呢?!
还有上面那个问题,我也想听听您的看法。。。
addfourliu
2012-07-11
打赏
举报
回复
[Quote=引用 1 楼 的回复:]
那你单步看看,是哪个函数关闭了全部。。
closeEvent()只是关闭窗口事情,
[/Quote]
一个程序运行到什么时候,才会进入它的析构函数呢?!
main()函数执行完毕?还是关闭改程序?
zhu_xz
2012-07-11
打赏
举报
回复
看看是不是因为某个parent-child关系导致某个object被销毁了两次?
shen_wei
2012-07-11
打赏
举报
回复
那你单步看看,是哪个函数关闭了全部。。
closeEvent()只是关闭窗口事情,
QT中的
close
、
close
Event
和
析构函数
的理解(基础知识)
析构函数
析构函数
(destructor) 与构造函数相反,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统自动执行
析构函数
。...void QWidget::
close
Event
(Q
Close
Event
*
event
) 当Qt从窗口系统接收...
close
Event
和
析构函数
的理解(Qt)
通过重写
close
Event
方法,我们可以在窗口关闭前执行自定义的操作,例如确认关闭和清理任务。而在
析构函数
中,我们可以进行资源的释放和清理工作,确保对象销毁时相关资源得到正确处理。通过重写
close
Event
方法,我们...
close
函数 qt_QT中的
close
、
close
Event
和
析构函数
的理解(基础知识)
析构函数
析构函数
(destructor) 与构造函数相反,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统自动执行
析构函数
。
析构函数
往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,...
Qt5.9关闭子窗口时执行特定代码(
析构函数
、关闭窗口)(setAttribute(Qt::WA_DeleteOn
Close
)、
close
Event
(Q
Close
Event
*
event
))
由于主窗口关闭时,会自动执行
析构函数
,而子窗口关闭时,却不会调用
析构函数
,进过博主查阅资料,发现有两种方法可以在子窗口关闭时,调用
析构函数
或者执行一个关闭函数。 第一种方法是关闭窗口时调用窗口的析构...
qt计算机
析构函数
,QT退出不会调用MainWindow
析构函数
但是,在重写
close
Event
并调用函数quit()之后,它似乎绕过了MainWindow
析构函数
,在那里我有一些代码。我在
close
Event
中缺少什么来正确关闭应用程序,以便调用MainWindow的
析构函数
,就像没有覆盖
close
E...
Qt
16,201
社区成员
26,591
社区内容
发帖
与我相关
我的任务
Qt
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
复制链接
扫一扫
分享
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章