关闭所有窗口后,Qt应用程序仍保留在内存中

时间:2013-07-08 18:35:34

标签: qt opencv

我是使用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()函数。

3 个答案:

答案 0 :(得分:1)

QCoreApplication::exec()启动一个事件循环。

这通常与终端窗口的存在有关。

使用QApplication::exec()它也会启动一个事件循环,但它通常与QMainWindow或最后打开的QWidget的存在相关联。

现在关闭它的最简单方法是转到Projects>运行>在终端中运行,然后检查它。

您可能还需要转到.pro文件并添加CONFIG += console

当你开始使用Qt信号和插槽时,事件循环将非常有用。

同样,要使任何Qt的GUI正常运行,您需要运行exec()事件循环。

在Qt Creator中运行任务时可以杀死任务的另一种方法是转到底部的Application Output标签,然后点击红色方块停止按钮。

希望有所帮助。

答案 1 :(得分:0)

您可以尝试在非qt窗口的关闭事件中调用qApp->quit()(虽然我不知道OpenCV)。

如果你开始使用非gui应用程序(当然是Qt语言),那么

qApp相当于QCoreApplication::instance(),如果你开始使用gui应用程序,则等同于QApplication

答案 2 :(得分:0)

要优雅地退出由QCoreApplication::exec() QCoreApplication::quit ()启动的事件循环,必须调用。 不知何故,当你完成OpenCV的东西时,它应该调用QCoreApplication::quit ()。由于它是一个静态插槽,您可以将信号连接到它或明确地调用它。