当前位置: 首页 > news >正文

QT:非模态使用WA_DeleteOnClose避免内存泄漏

connect(ui->actionnewFile,&QAction::triggered,this,[=](){
      QDialog*dlg = new QDialog(this);
      //dlg.exec();
      dlg->show();
      dlg->setAttribute(Qt::WA_DeleteOnClose);
      qDebug()<<"打开对话框";
    });

1. `QDialog* dlg = new QDialog(this);
   - 创建了一个 `QDialog` 对象 `dlg`,并将其父对象设置为当前对象(`this`)。这意味着 `dlg` 的生命周期与父对象相关联,但父对象不会自动删除 `dlg`,除非显式设置。

2. dlg->show();
   - 调用 `show()` 方法将对话框显示出来。它是一个非模态对话框,用户可以在对话框显示的同时与主窗口交互。

3. dlg->setAttribute(Qt::WA_DeleteOnClose);
   - 为对话框设置 `Qt::WA_DeleteOnClose` 属性。这意味着当用户关闭对话框时(例如点击关闭按钮或调用 `close()` 方法),对话框对象会自动被删除,从而避免内存泄漏。

关于 `dlg->exec()` 和 `dlg->show()`
dlg->exec();`
  - `exec()` 是一个模态对话框的显示方式。它会阻塞调用它的线程,直到对话框关闭。在对话框关闭后,程序才会继续执行 `exec()` 之后的代码。
  - 如果你使用 `exec()`,通常不需要手动设置 `Qt::WA_DeleteOnClose`,因为模态对话框通常在关闭后会立即被处理。

dlg->show();
  - `show()` 是非模态对话框的显示方式。它不会阻塞主线程,用户可以在对话框打开的同时与主窗口交互。
  - 在这种情况下,设置 `Qt::WA_DeleteOnClose` 是一个很好的实践,以确保对话框在关闭时被正确删除。

总结
- `dlg->setAttribute(Qt::WA_DeleteOnClose);` 的作用是**声明**对话框在关闭时自动删除自己,避免内存泄漏。
- 如果你使用 `show()` 显示对话框,建议设置 `Qt::WA_DeleteOnClose`。
- 如果你使用 `exec()` 显示对话框,通常不需要设置 `Qt::WA_DeleteOnClose`,因为模态对话框的生命周期通常由代码逻辑控制。

相关文章:

  • ESP32C3 ADC 检测电压
  • 【 Fail2ban 使用教程】
  • 力扣——两数相加
  • 每日一题--数据库
  • 建筑兔零基础自学记录45|获取高德/百度POI-1
  • 前端面试:富文本编辑器里面如何在划词选择的文本上添加右键菜单?
  • 心理状态的微妙变化
  • 网关的详细介绍
  • qemu的usb前后端处理
  • 十四、Vue 项目工程化:从 ESLint 到 CI/CD 的最佳实践
  • 前端项目部署方案
  • 阿里云服务器购买及环境搭建宝塔部署springboot和vue项目
  • python-leetcode-叶子相似的树
  • 【MySQL】MySQL是如何传输数据的?
  • day3
  • 算法手记3
  • 人工智能与我何干
  • MinIO问题总结(持续更新)
  • VMware虚拟机网络连接模式介绍以及nat模式访问公网实践
  • AI短视频流量获取方法(一)
  • 做外贸有哪些好的免费b2b网站/网络营销logo
  • 六合哪家做网站建设/google图片搜索引擎入口
  • 如何做中英切换的网站/咖啡seo是什么意思
  • 开源快速网站搭建平台/app推广代理去哪里找
  • 企业内部系统网站制作/百度推广app下载
  • 建站系统的选用分析/广点通广告平台