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に開かれたの存在に関連付けられています。

これを閉じる最も簡単な方法は、[プロジェクト] > [実行] > [ターミナルで実行] に移動して確認することです。

また、.pro ファイルに移動して、CONFIG += console.

Qt シグナルとスロットを使い始めると、イベント ループが非常に役立ちます。

また、Qt の GUI が適切に機能するには、exec()イベント ループを実行する必要があります。

Qt Creator でタスクを実行しているときにタスクを強制終了する別の方法はApplication Output、下部のタブに移動し、赤い四角の停止ボタンをクリックすることです。

それが役立つことを願っています。

于 2013-07-08T18:45:33.333 に答える
0

によって開始されたイベント ループから正常に終了するには、 をQCoreApplication::exec() QCoreApplication::quit ()呼び出す必要があります。どういうわけか、OpenCV の処理が完了したら、 を呼び出す必要がありますQCoreApplication::quit ()。これは静的スロットであるため、シグナルを接続するか、明示的に呼び出すことができます。

于 2013-07-08T19:28:20.477 に答える
0

非qtウィンドウのクローズイベントで呼び出すことができqApp->quit()ます(ただし、OpenCVはわかりません)。

qAppQCoreApplication::instance()は、GUI 以外のアプリケーション (もちろん Qt の用語で) を開始した場合、または GUI アプリケーションを開始した場合と同等QApplicationです。

于 2013-07-08T19:22:03.343 に答える