目录

背景

实例


背景

今天在写代码的时候,new出的界面,没有delete,因为是dialog,可以用exec() 把后面的界面阻塞掉,但个人并不喜欢这样,毕竟觉得强扭的瓜不甜!不想让后面的那个界面为了xxx而改变自己,所以在此,想用其他方法!Qt中一个局部对象,如何通过不在此函数中delete也能释放!

经过思考与实践发现有2个方法:

1. 是使用Qt对象树,这应该是Qt上很常见的方法;

2. 是 delete this

实例

方法一:使用Qt的对象树释放!

当主界面被关闭后,会把对象树上的释放掉!

程序结构如下:

源码如下:

testdialog.h

#ifndef TESTDIALOG_H
#define TESTDIALOG_H#include <QDialog>namespace Ui {
class TestDialog;
}class TestDialog : public QDialog
{Q_OBJECTpublic:explicit TestDialog(QWidget *parent = 0);~TestDialog();protected slots:void btnClicked();protected:void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE;private:Ui::TestDialog *ui;
};#endif // TESTDIALOG_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();protected slots:void btnClicke();private:Ui::Widget *ui;
};#endif // WIDGET_H

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

testdialog.cpp

#include "testdialog.h"
#include "ui_testdialog.h"#include <QMessageBox>TestDialog::TestDialog(QWidget *parent) :QDialog(parent),ui(new Ui::TestDialog)
{ui->setupUi(this);connect(ui->pushButton, SIGNAL(clicked(bool)), this, SLOT(btnClicked()));
}TestDialog::~TestDialog()
{delete ui;QMessageBox::information(this, "提示", "TestDialog中的析构函数被调用");
}void TestDialog::btnClicked()
{//this->close();//delete this;
}void TestDialog::closeEvent(QCloseEvent *event)
{Q_UNUSED(event)btnClicked();
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include "testdialog.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);connect(ui->pushButton, SIGNAL(clicked(bool)), this, SLOT(btnClicke()));
}Widget::~Widget()
{delete ui;
}void Widget::btnClicke()
{TestDialog *testDialog = new TestDialog(this);testDialog->show();//不释放,看看能不能析构
}

testdialog.ui

widget.ui

第二种方法是delete this

把testdialog.cpp中btnclicked中的那两行注释去掉就可以了!

上面的这种只是一个例子,很脆弱,没有考虑在栈区创建的对象!

Qt工作笔记-通过 对象树 或 delete this 释放对象相关推荐

  1. Qt工作笔记-发送端发送Json格式的数据包,接收端解析数据包

    原理以及运行 原理是因为QJsonDocument提供了一个函数toJson 可以直接把Json数据转成QByteArray,这样就可以直接发送数据包,然后再按照常规方法解析即可,本源码中含解析内容, ...

  2. Qt工作笔记-Qt元对象系统解析【2合1】

    博文转载地址: https://blog.csdn.net/spwper/article/details/51332187 说Qt信号与槽是一个很好机制,不如说Qt的元对象系统很强大.这也是大家讲Qt ...

  3. Qt工作笔记-QML界面与QWidgets界面相互交互

    C++要做的事情: 1.QML中注册C++类型(qmlRegisterType) 2.获取元对象树,从中提取注册的指针[这样就和普通的对象一样了] qml要做的事情: 1.import注册的C++类型 ...

  4. Qt工作笔记-MineData相关基本操作

    QMimeData类提为数据提供一个容器,用来记录关于MIME类型数据的信息 QMimeData常用来描述保存在剪切板里信息,或者拖拽原理 QMimeData对象把它所保存的信息和正确的MIME类型连 ...

  5. C/C++|Qt工作笔记-4种方法判断当前对象(类)名或标识(继承发,typeid法,元对象className()法,Q_CLASSINFO法)

    回想起3个月前,刚刚参加工作也做过类似的笔记,但只有2种方法,估计刚毕业没有什么墨水,经过3个月时间又多了2种方法: 这些方法都可用于RTTI 第一个方法是继承发(C++中很推荐用这个,感觉用这个结构 ...

  6. Qt工作笔记-对QThread使用的进一步认识(exec及对象在哪个线程创建)

    目录 基本概念 代码与实例 基本概念 这里有个官方例子,如下: class WorkerThread : public QThread{Q_OBJECTvoid run() override {QSt ...

  7. Qt工作笔记-通过C++使widgets与QQuick交互(包含qml界面对象与C++对象映射)

    目录 理论及程序运行 源码 理论及程序运行 这里要注意,通过qmlRegisterType函数去注册一个QML类! 下面再指明一个关键的问题,如何把QML界面的对象映射到C++呢! 可以有如下的处理: ...

  8. Qt文档阅读笔记-Qt工作笔记-QThread解析与实例(主线程发送信号给子线程)

    目录 QThread 官方解析 博主栗子 子线程发射信号给主线程 QThread 官方解析 Detailed Description QThread类提供了跨平台的线程管理的API. QThread对 ...

  9. Qt工作笔记-对*QObject::sender()的认识

    今天有个大佬给我说了这个函数: [protected] QObject *QObject::sender() const 简直阔怕: 感觉这个函数有点歪门邪道! 这里有个多线程中的警告,Qt::Dir ...

最新文章

  1. 入门架构——单机高性能
  2. unix 存储空间不足 无法处理此命令_大数据分析命令行使用教程
  3. LeetCode面试题03. 数组中重复的数字
  4. 自定义Visual Studio.net Extensions 开发符合ABP vnext框架代码生成插件[附源码]
  5. 【C++深度剖析教程14】经典问题解析三之关于赋值的疑问
  6. 永远年轻,永远热泪盈眶----致所有奋斗的ACMer
  7. 机器学习笔记(七)——决策树模型
  8. 1000个摄像头的网络怎么搭建?为什么500个就卡的不行?
  9. 是谁榨干了 Android 设备的电量和流量?!| 极客头条
  10. 1.1zookeeper简介
  11. C语言实例第9期:提取字符串中全部数字
  12. Weka的全名是怀卡托智能分析环境
  13. 合唱队形(最大上升子序列)
  14. 阿里云国际版跨境加速,全球加速和Squid 缓存代理解决方案
  15. PHP+python+nodejs+ springboot+vue 社区互助平台
  16. LeetCode 881.救生艇
  17. 使用FFMpeg将音频PCM数据生成WAV和MP3文件
  18. Curl运维命令 - 日常用法总结
  19. linux vi或者vim编辑器中如何显示行号
  20. 微信小程序获取昵称,头像

热门文章

  1. 10 个利用Eclipse调试Java的常见技巧
  2. 今天一看,自己发的文章原来这么多了。openeim
  3. 强调团体与配合的jinbiguandan
  4. 再讨论下古老的include
  5. 优秀的程序员应该掌握多少门编程语言?
  6. 10个经典的C语言面试基础算法及代码
  7. Boss黑话,老板看完都笑了!
  8. m 文件 dll matlab 中调用_利用USO服务将特权文件写入武器化
  9. 北京大学药学院张亮仁教授/刘振明研究员课题组博士后招聘启事
  10. 中医科学院院士团队解析丹参纯合基因组和新基因簇在丹参酮合成中的作用