Qt显示对话框程序崩溃

问题描述

创建一个继承自QDialog的对话框DialogA,在主窗体显示之前进行显示,当执行DialogA的exec函数时,程序崩溃,提示:Critical error detected c0000374

问题排查

查看DialogA类中的内存创建是否存在异常,排查后未发现此问题。注释程序主体代码,程序运行正常,没有崩溃。局部放开注释代码,缩小问题点。经过调试,崩溃点:this->setAttribute(Qt::WA_DeleteOnClose); 删除该属性定义,问题解决。

原因分析

当 QDialog::exec() 被调用时,它会进入一个局部事件循环。如果 Qt::WA_DeleteOnClose 属性被设置,当对话框关闭时,Qt 会尝试删除对话框对象。如果此时事件循环中还有未处理的事件或者定时器槽函数试图访问该对话框,就可能导致崩溃。

问题验证

cpp 复制代码
DialogA dialog;
int result = dialog.exec();
if (result != QDialog::Accepted)
{
	return -1;
}

在return语句处打上断点,程序会多次进入该断点处。

相关推荐
Shorasul几秒前
golang如何实现设备数据采集网关_golang设备数据采集网关实现要点
jvm·数据库·python
杰 .1 分钟前
立即数与算术转换
开发语言·c/c++
aq55356002 分钟前
PHP vs C++ vs 易语言:编程语言终极对比
开发语言·c++·php
妙蛙种子3115 分钟前
【Java设计模式 | 创建者模式】建造者模式
java·开发语言·后端·设计模式·建造者模式
2301_764150566 分钟前
如何用 some 检测数组中是否存在至少一个满足条件的项
jvm·数据库·python
j_xxx404_7 分钟前
数据库基础夯实:从零手写DDL与DML,MySQL核心语法实战解析
数据库·mysql
knowwen10 分钟前
2026年4月13日 Java笔试题
java·开发语言
环流_12 分钟前
多线程2(Java线程的状态)
java·开发语言
爱学习的小囧14 分钟前
VMware NSX-T Data Center 3.2.3.0 部署后账号密码获取及登录配置教程
linux·运维·服务器·网络·数据库·esxi
_oP_i14 分钟前
python 之playwright 介绍
开发语言·python