【问题标题】:Qt application remains in memory after closing all windowsQt 应用程序在关闭所有窗口后仍保留在内存中
【发布时间】: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() 函数是否正确。

【问题讨论】:

标签: qt opencv


【解决方案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 ()。由于它是一个静态插槽,因此您可以将信号连接到它或显式调用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-30
        • 1970-01-01
        • 1970-01-01
        • 2014-05-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多