問題は次のとおりです。アプリケーションが何かを積極的に実行していないときに閉じると、正常に終了します。しかし、何かに積極的に働いている(例えば、whileループで待っている)場合、メインウィンドウは閉じますが、プログラムはバックグラウンドで実行され続けます。MainWindowが閉じられた後でもQtアプリケーションがメモリに残ります
私はこの問題をグーグルで、今日の良い部分を費やして、可能な修正を実施したが、無駄にしました。 quit()関数は単純に何もしないようです。私が試したことがいくつかあります:
app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
を使用しています。&app, SLOT(quit())
をqApp, SLOT(aboutQt())
に変更しようとしたため、信号がトリガされたことがわかりました。aboutQtウィンドウが一時的にポップアップしました。- メインウィンドウのボタンから実行される機能の先頭に
qApp->quit();
が含まれています。アプリケーションはその行に対して実行されますが、効果はありません。 processEvents()
を使用して、GUIが更新されていることを確認してください。mainWindow.setAttribute(Qt::WA_QuitOnClose);
のような文をmain.cppに含めます。
メインウィンドウが閉じられたとき、私はちょうど完全に終了への応用をしたいです。
それはすべての違いを、私は、qextserialportライブラリを使用しています。
アプリケーションはマルチスレッドですか? – Lol4t0
私は個人的にスレッドを作成していませんが、私が使っているライブラリがあれば分かりません。私がデバッガを開き、スレッドの下を見ると、 "ntdll!ldrFindResourceEx_U"の束が表示されます。私はタスクマネージャプロセスで私のプログラムの1つのインスタンスしか見ません。 PS:改行を作成するのではなく、メッセージを送信するのはなぜでしょうか? – SharpHawk
メインスレッドはそれらのスレッドが作業を終了するのを待つかもしれません。暗黙的に行うことができます。たとえば、オブジェクトのデストラクタがスレッドの終了を待つなどです。あなたの図書館のコードを勉強してください。 PS qextserialportは、私が知っている限り、スレッドを作成しません。 – Lol4t0