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

相关推荐
dblens 数据库管理和开发工具14 小时前
PostgreSQL物化视图详解:用空间换时间的性能优化利器
数据库·postgresql·性能优化
TDengine (老段)14 小时前
TDengine 字符串函数 REGEXP_IN_SET 用户手册
数据库·物联网·mysql·时序数据库·tdengine·涛思数据
珹洺14 小时前
Java-Spring入门指南(三十二)Android SQLite数据库实战
java·数据库·spring
未来之窗软件服务14 小时前
幽冥大陆(二十三)python语言智慧农业电子秤读取——东方仙盟炼气期
开发语言·python·仙盟创梦ide·东方仙盟·东方仙盟sdk·东方仙盟浏览器
不会c嘎嘎14 小时前
C++ -- stack和queue
开发语言·c++·rpc
CodeByV14 小时前
【C++】C++11:其他重要特性
开发语言·c++
2501_9411112515 小时前
自动化与脚本
jvm·数据库·python
2501_9411113315 小时前
C++代码重构实战
开发语言·c++·算法
合作小小程序员小小店15 小时前
web开发,在线%小区,物业%管理系统,基于idea,html,jsp,java,ssm,mysql数据库
java·数据库·mysql·jdk·intellij-idea
爱装代码的小瓶子15 小时前
【c++知识铺子】相对简单的容器适配器双生子-stack和queue(STL)
开发语言·c++