QT-子窗口关闭时,为什么不执行析构函数问题

64 篇文章 10 订阅
27 篇文章 20 订阅

子窗体的构造函数中初始化了父窗体的parent,当关闭子窗体时不会调用析构函数,

只有关闭父窗体时,才会调用子窗体的析构函数

解决办法如下

setAttribute(Qt::WA_DeleteOnClose);

写在子窗体的构造函数就可以了~

按照文库的说法,“如果子窗体初始化了父窗体的parent,只有父窗体析构时才执行自己的析构函数。”

根据我的经验,系统默认的构造函数中parent都有默认值0,而构造函数的实现中,都有初始化列表指定父类的parent为当前parent,如果不指定,也就是0。这里还不能把parent指定位父窗体,否则子窗体会作为一个父窗体当中的“部件”而存在。父类和父窗体不是一个东西。所以文库当中的说法我暂时不太明白。

我的想法是这样,既是不初始化父类的parent,它的构造函数中parent参数依然会有默认值为空指针,所以是否执行析构函数,和初始化父类构造函数我想不出联系。

但是文库中给出了解决方法,在子窗体构造函数中加一句即可:

setAttribute(Qt::WA_DeleteOnClose);
这才是最重要的。根据qt的文档,这个属性就是在close时delete。

 
Qt::WA_DeleteOnClose 55
 
Makes Qt delete this widget when the widget has accepted the close event (see QWidget::closeEvent()).
就是每次设计窗体时,事实上必须加这一句
 

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值