Qt 应用程序在关闭所有窗口后仍保留在内存中
Posted
技术标签:
【中文标题】Qt 应用程序在关闭所有窗口后仍保留在内存中【英文标题】:Qt application remains in memory after closing all windows 【发布时间】:2013-07-08 18:35:33 【问题描述】:我是使用 Qt 和 OpenCV 的初学者,我有一个小问题。 我的应用程序工作正常,但关闭后似乎 opencv.exe(应用程序名称)仍在内存中。 这是我的代码:
int main(int argc, char* argv[])
QCoreApplication a(argc, argv);
cv::Mat img = cv::imread("img.jpg");
cv::namedWindow("Image");
cv::imshow("Image",img);
return a.exec();
如何通过关闭应用程序窗口杀死任务? 我不确定我使用 exec() 函数是否正确。
【问题讨论】:
谢谢大家,我找到了一个很好的解决方案:***.com/questions/4180394/… 【参考方案1】:QCoreApplication::exec()
启动事件循环。
这通常与终端窗口的存在有关。
使用QApplication::exec()
,它还会启动一个事件循环,但它通常与QMainWindow
或最后打开的QWidget
的存在相关联。
现在最简单的关闭它的方法是转到 Projects > Run > Run in Terminal,然后检查它。
您可能还需要转到您的 .pro 文件并添加 CONFIG += console
。
当你开始使用 Qt 信号和槽时,事件循环将非常有用。
此外,要使 Qt 的任何 GUI 正常运行,您还需要运行 exec()
事件循环。
在 Qt Creator 中运行任务时可以终止任务的另一种方法是转到底部的 Application Output
选项卡,然后单击红色方形停止按钮。
希望对您有所帮助。
【讨论】:
【参考方案2】:您可以尝试在非 qt 窗口的关闭事件中调用 qApp->quit()
(虽然我不知道 OpenCV)。
qApp
等价于QCoreApplication::instance()
,如果你启动了一个非 gui 应用程序(当然在 Qt 方面),或者一个QApplication
,如果你启动了一个 gui 应用程序。
【讨论】:
【参考方案3】:要优雅地退出由QCoreApplication::exec()
启动的事件循环,必须调用QCoreApplication::quit ()
。
不知何故,当你完成你的 OpenCV 东西时,它应该调用QCoreApplication::quit ()
。由于它是一个静态插槽,因此您可以将信号连接到它或显式调用它。
【讨论】:
以上是关于Qt 应用程序在关闭所有窗口后仍保留在内存中的主要内容,如果未能解决你的问题,请参考以下文章