Qt|使用QDialog窗口调用exec时崩溃解决问题

一起养成写作习惯!这是我参与「掘金日新计划 · 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++程序猿~

猜你喜欢

转载自juejin.im/post/7086697651659341854