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

相关推荐
无限进步_1 分钟前
【C语言】用队列实现栈:数据结构转换的巧妙设计
c语言·开发语言·数据结构·c++·链表·visual studio
weixin_579599663 分钟前
编写一个程序,输入两个数字的加减乘除余数(Python版)
开发语言·python
AI题库9 分钟前
PostgreSQL 18 从新手到大师:实战指南 - 2.4 备份与恢复策略
数据库·postgresql·oracle·数据库备份
CYTElena10 分钟前
JAVA关于集合的笔记
java·开发语言·笔记
晴天¥11 分钟前
Oracle中的概要文件
运维·数据库·oracle
我是唐青枫17 分钟前
深入理解 C#.NET Parallel:并行编程的正确打开方式
开发语言·c#·.net
RFCEO25 分钟前
用手机写 Python程序解决方案
开发语言·python·智能手机·qpython环境安装
一 乐29 分钟前
健康管理|基于springboot + vue健康管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端·学习
学编程就要猛31 分钟前
MySQL:CRUD
数据库·sql·mysql
IT技术分享社区31 分钟前
MySQL实战:自动计算字段如何让查询效率翻倍?
数据库·mysql