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语句处打上断点,程序会多次进入该断点处。

相关推荐
bug菌¹几秒前
滚雪球学Oracle[2.5讲]:数据库初始化配置
数据库·oracle·数据库初始化·初始化配置
一休哥助手8 分钟前
Redis 五种数据类型及底层数据结构详解
数据结构·数据库·redis
落落落sss11 分钟前
MybatisPlus
android·java·开发语言·spring·tomcat·rabbitmq·mybatis
翔云12345616 分钟前
MVCC(多版本并发控制)
数据库·mysql
简单.is.good29 分钟前
【测试】接口测试与接口自动化
开发语言·python
代码敲上天.33 分钟前
数据库语句优化
android·数据库·adb
Yvemil71 小时前
MQ 架构设计原理与消息中间件详解(二)
开发语言·后端·ruby
盒马盒马1 小时前
Redis:zset类型
数据库·redis
程序员是干活的1 小时前
私家车开车回家过节会发生什么事情
java·开发语言·软件构建·1024程序员节
静听山水1 小时前
mysql语句执行过程
数据库·mysql