Qt应用程序在关闭主窗口后仍停留在内存中。

7
问题如下:如果应用程序在不活动的情况下关闭,它会正确退出。但是,如果它正在执行某些操作(例如等待while循环),则主窗口将关闭,但程序将继续在后台运行,通过打开任务管理器可以确认这一点。
我花了一整天的时间搜索问题并实施可能的修复措施,但都没有成功。似乎quit()函数根本没有起作用。以下是我尝试过的一些方法:
使用app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()))。我知道信号被触发了,因为我尝试将&app,SLOT(quit())更改为qApp,SLOT(aboutQt()),aboutQt窗口短暂地弹出。
在从主窗口按钮运行的函数开头包括qApp->quit()。应用程序确实运行到了那一行,但没有任何效果。
使用processEvents()确保GUI正在更新。
在main.cpp中包括诸如mainWindow.setAttribute(Qt::WA_QuitOnClose)之类的语句。
我只想让应用程序在主窗口关闭时完全退出。
如果有区别的话,我正在使用qextserialport库。

你的应用程序是多线程的吗? - Lol4t0
我个人没有创建线程,但我不确定我正在使用的库是否在创建。如果我打开调试器并查看线程,我会看到一堆“ntdll!ldrFindResourceEx_U”函数。然而,在任务管理器进程中,我只看到一个程序实例。顺便说一句:为什么按回车键会发送消息而不是创建换行? - SharpHawk
然后,您的主线程可能会等待这些线程完成其工作。它可以隐式地完成,例如,对象的析构函数可以等待线程完成。您应该研究您的库代码。PS,请注意qextserialport据我所知并不创建任何线程。 - Lol4t0
1个回答

1

我不知道出了什么问题,但是既然您的槽函数实际上接收到了信号,您可以从该槽函数中调用exit()作为一种解决方法。


我认为这是一个不好的解决方案,因为如果应用程序在另一个线程中处理某些内容,在这种终止之后,TS 可能会得到一些数据损坏。 - Lol4t0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接