写点什么

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

  • 2022-10-20
    河北
  • 本文字数:763 字

    阅读完需:约 1 分钟

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

前两天新手妹子遇到了一个问题,问道:“姐,我这个窗口在关闭的时候怎么总是崩溃,也不知道是为什么?”


新来的小妹妹是个应届生,使用窗口展示页面的时候也是磕磕绊绊的,在使用 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++程序猿~

发布于: 刚刚阅读数: 4
用户头像

书山有路勤为径,学海无涯苦作舟 2022-07-01 加入

擅长语言:C++ 涉及语言:Python

评论

发布
暂无评论
Qt|使用QDialog窗口调用exec时崩溃解决问题_c++_中国好公民st_InfoQ写作社区