我是使用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()函数。
答案 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)。
qApp
相当于QCoreApplication::instance()
,如果你开始使用gui应用程序,则等同于QApplication
。
答案 2 :(得分:0)
要优雅地退出由QCoreApplication::exec()
QCoreApplication::quit ()
启动的事件循环,必须调用。
不知何故,当你完成OpenCV的东西时,它应该调用QCoreApplication::quit ()
。由于它是一个静态插槽,您可以将信号连接到它或明确地调用它。