一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情。
前两天新手妹子遇到了一个问题,问道:“姐,我这个窗口在关闭的时候怎么总是崩溃,也不知道是为什么?”
新来的小妹妹是个应届生,使用窗口展示页面的时候也是磕磕绊绊的,在使用QDialog窗口时,每次调用exec()函数后,总是会崩溃。
那么,是什么原因会导致我们在调用了QDialog::exec()函数后出现错误的呢?
解决问题的方法:
使用最笨的方法解决一切不可解决的问题。
1:注释所有代码
在调用exec()出错了,肯定是当前QDialog窗口的问题,我们首先将你写的所有代码,进行注释,只保留了最初始的窗口框架。窗口中如果有继承父窗口或者其他操作窗口时,也一并注释掉,采用系统的QDialog作为父类。
这时候,我们再执行看看会不会崩溃?一般情况下,只是创建一个空窗口是不会导致崩溃的。
QMyDialog dlg(nullptr);
dlg.exec();
复制代码
以这种方式调用,此时exec崩溃的几率是不大的,除非你的响应控件问题。
2:响应消息判断
接下来,我们就将UI涉及到的响应消息放开,但并不放开内部的实现逻辑,查看是不是因为某些控件错误使用导致的。
如果也是正常关闭,我们将响应消息中的实际处理放开。
运行查看下,窗口是否正常关闭。
3:窗口属性判断
经过前两个步骤,我们发现,都是可以正常关闭的,说明不是我们的业务逻辑以及页面风格引起的,那么我们再查看下是否对该窗口设置了哪些特殊的窗口风格。
经过我一步一步引导,发现在QDialog的构造函数中设置了这样一句话:Qt::WA_DeleteOnClose
对窗口设置了这样一个属性,导致窗口在exec()时出现了崩溃问题。
其实,对于刚刚写Qt代码的新手来说,有些属性的理解并不是很透彻,就使用了,这就会导致我们在界面展示的时候正常运行,但是关闭窗口时,出现了崩溃问题。
到这里,就已经找到了崩溃原因,对于我们新手调试来说,最好的方式就是一步一步注释代码,看一看究竟是到了哪里影响我们崩溃的。
我是中国好公民st,一名C++程序猿~