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

2023-05-16

子窗体的构造函数中初始化了父窗体的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()).
就是每次设计窗体时,事实上必须加这一句
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • QT中QLIST清空问题分析

    1 代码分析 向QList中添加4个项 QList lt QWidget gt lstWidget lstWidget append new QWidget lstWidget append new QWidget lstWidget ap
  • DAQ数据采集卡软件编程-只支持一个程序来访问设备

    1 安装软件开发包 xff08 SDK xff09 DAQNAVI SDK 2 可识别到数据采集卡片 3 加载C 编程的动态链接库 dll文件 xff08 Automation BDaq dll与Automation BDaq4 dll区别
  • 实现与研华 PCI 采集卡通讯

    如果使用过 PCI 采集卡的盆友应该对 研华 这个品牌不陌生 xff0c 可以说研华还是很强大的 最近因为工作需要 xff0c 使用一块研华的 PCI1714UL 型号的采集卡 xff0c 去高速采集电压信号 xff0c 学习了几天后分享给
  • QT中connect函数的几种用法详解总结

    前言 信号与槽机制是QT非常核心的东西 xff0c 通过信号与槽我们可以将不同的部分有机的结合起来 xff0c 使得各个组件之间的交互简单高效 xff0c 信号与曹槽像是设计模式中的观察者模式 xff08 我自己觉得是这样 xff09 xf
  • Qt中QThread安全退出方式总结

    QThread的使用方式 在Qt中 xff0c 使用QThread实现子线程的方式有两种 xff1a 继承QThread xff0c 重写run函数 继承QObject xff0c 使用moveToThread方式移动进QThread QT
  • Qt断开信号与槽的方法,Qt信号的处理 (connect和disconnect和blockSignals的使用方法)

    关于信号与槽的研究 DisConnect bool QObject disconnect const QObject sender const char signal const QObject receiver const char me
  • Qt QList清空问题

    1 代码分析 向QList中添加4个项 QList lt QWidget gt lstWidget lstWidget append new QWidget lstWidget append new QWidget lstWidget ap
  • Qt 信号和槽及第五个参数详解(线程相关)

    注意 xff1a 信号发送给信号容易阻塞 xff0c 需要设置好QObject Connect函数中第五个参数 xff0c Qt DirectConnection xff1a 发送的信号在哪个线程则接收方就运行在哪个线程上 前言 信号槽是Q
  • 研华PCI1716L的C#编程

    新建windows窗体项目 xff1b 添加引用研华的库文件 将库添加using 整个代码如下 xff1a using System using System Collections Generic using System Compone
  • QT中关于类静态成员的编码格式错误(静态成员初始化必须放在.cpp文件中)

    qt中指针类型的单例 error LNK1169 找到一个或多个多重定义的符号错误原因 xff1a 因为创建了 h文件和 cpp文件 xff0c 但是静态成员却在 h文件中类的外面初始化了成员变量 只有仅存在 h文件声明定义时才能这么用 x
  • 8uftp怎么连到,8uftp怎么连到服务器

    8uftp是一款易用的FTP软件 xff0c 很多刚接触网站建设的人都会用到这个软件 但使用8uftp连接服务器相对来说较为繁琐 xff0c 很多小伙伴都希望能尽量节省工作时间 xff0c 那你就应该试试iis7 作为IIS7服务器管理工具
  • QT中QWIDGET动态增加控件

    QPushButton btn 61 new QPushButton this btn gt show QPushButton buttonTest 61 new QPushButton 动态创建按钮 buttonTest gt setTe
  • QT::::点击退出按钮,退出当前窗口(lamda表达式写法),实现点击按钮打开和关闭窗口

    点击退出按钮 xff0c 退出当前窗口 QObject connect ui pushButton 5 amp QPushButton pressed this QApplication app app gt exit 在这里两个函数一样的
  • C# 中线程同步使用信号量总结

    所谓线程同步 xff0c 就是多个线程在某个对象上执行等待 xff08 也可理解为锁定该对象 xff09 xff0c 直到该对象被解除锁定 C 中对象的类型分为引用类型和值类型 CLR在这两种类型上的等待是不一样的 我们可以简单地理解为在C
  • 对话框及窗体在多线程中的应用(阻塞和非阻塞)

    方式1 阻塞UI线程及消息循环 AutoResetEvent autoResetEvent 61 new AutoResetEvent false Task Factory StartNew 61 gt Form form 61 new F
  • Windows11装新环境问题

    系统重装 1 下载最新的老毛桃U盘启动盘制作工具 xff08 旧版的会不支持windows11启动项 xff09 xff0c 制作U盘启动盘 2 将电脑的bitLocker硬盘加密取消掉在所有设置安全加密里 xff0c 否则将无法启动提示硬
  • c#引用office组件库迁移源码问题

    1 当程序引用了office组件时 xff0c 需要安装与迁移的源码相同版本的offce Library才行 xff0c 否则会报异常 2 可以下载office三合一版快捷安装 xff0c vs在引用里的com选项卡里会自动识别到相应的of
  • TCP和UDP的发送缓冲区和接收缓冲区内存问题

    TCP协议是作用是用来进行端对端数据传送的 xff0c 那么就会有发送端和接收端 xff0c 在操作系统有两个空间即user space和kernal space 每个Tcp socket连接在内核中都有一个发送缓冲区和接收缓冲区 xff0
  • QtCreator修改项目构建目录

    使用QtCreator编译Qt项目时 xff0c 如有需求修改编译过程文件 xff08 即Makefile o exe等文件 xff09 存放目录 xff0c 简单在工具 gt 选项 gt 构建和运行中修改Default build dir
  • QT中删除信号于槽的连接

    如果是在UI里建立的 xff0c 那就在下面这个函数里删除连接槽函数的对应行 void MainForm qt static metacall QObject o QMetaObject Call c int id void a if c

随机推荐