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

相关推荐
山茶花开时。36 分钟前
[Oracle] GREATEST()函数
数据库·oracle
mailtolaozhao3 小时前
C#入门--Hello world
开发语言·c#
折翼的恶魔3 小时前
SQL166 删除索引
数据库
王维志3 小时前
C# 中的 DateTime
开发语言·c#·.net
重生之我是Java开发战士3 小时前
【C语言】文件操作全解析
c语言·开发语言
歪歪1007 小时前
HTML 如何转 Markdown
开发语言·chrome·python·程序人生·html
auspicious航8 小时前
PostgreSQL 高可用与负载均衡
数据库·postgresql
mct1238 小时前
QUdpSocket发送组播和接受组播数据
qt·组播
小坏坏的大世界8 小时前
C++中多线程和互斥锁的基本使用
开发语言·c++
路由侠内网穿透8 小时前
本地部署 SQLite 数据库管理工具 SQLite Browser ( Web ) 并实现外部访问
运维·服务器·开发语言·前端·数据库·sqlite