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

相关推荐
yivifu1 分钟前
精益求精,支持处理嵌套表格的Word表格转HTML表格
开发语言·c#·word
沐知全栈开发2 分钟前
PHP MySQL WHERE 子句详解
开发语言
糖纸风筝2 分钟前
Java指南:eclipse、java-activemq与测试验证
java·开发语言·学习
小坏讲微服务5 分钟前
整合Spring Cloud Alibaba与Gateway实现跨域的解决方案
java·开发语言·后端·spring cloud·云原生·gateway
码上成长31 分钟前
<script setup> 实战模式:大型组件怎么拆?
开发语言·javascript·vue.js
沐浴露z1 小时前
详解 MySQL 自适应哈希
数据库·mysql·哈希算法
小五Z1 小时前
MySQL--事务
数据库·mysql
小许学java1 小时前
MySQL存储过程
数据库·mysql·存储过程
九河_1 小时前
解决pip install gym==0.19.0安装失败问题
开发语言·python·pip·gym
红豆诗人1 小时前
C语言进阶知识--文件操作
c语言·开发语言·文件操作