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