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 应用程序在关闭所有窗口后仍保留在内存中的主要内容,如果未能解决你的问题,请参考以下文章

应用程序停止后Qt关闭托盘图标

第52课 命令行参数的应用

在QT中关闭窗口之前获取应用程序退出信号

Qt全屏窗口隐藏Win8/10触摸键盘

Qt 中的主应用程序窗口和对话交互

可能的 Qt5 错误:调用 setFixedSize() 会禁用主窗口的关闭按钮(在 Win7 下)