0

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

4

3 回答 3

1

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

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

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

现在关闭它的最简单方法是转到 Projects > Run > Run in Terminal,然后检查它。

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

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

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

在 Qt Creator 中运行任务时可以终止任务的另一种方法是转到Application Output底部的选项卡并单击红色方形停止按钮。

希望有帮助。

于 2013-07-08T18:45:33.333 回答
0

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

qApp相当于QCoreApplication::instance()如果您启动了一个非 gui 应用程序(当然在 Qt 方面),或者QApplication如果您启动了一个 gui 应用程序。

于 2013-07-08T19:22:03.343 回答
0

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

于 2013-07-08T19:28:20.477 回答