2013-06-12 9 views
7

Qtプログラムを終了しようとすると、ウィンドウがなくなっても、バックグラウンドで動作し続けます。Qtプログラムを正しく閉じるには?

基本的には、メインウィンドウ(親を持たない)で赤い十字をクリックすると、正常に終了するようにする必要があります。クロスがクリックされた後

QApplication app(argc, argv); 
//... 
app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit())); 
return app.exec(); 

または

QApplication app(argc, argv); 
//... 
app.setQuitOnLastWindowClosed(true); 
return app.exec(); 

どちらも仕事は、プロセスがまだ、メモリに常駐:

Following this link

は、私のようないくつかのことを試してみました。

次に、プログラムを正しく閉じるにはどうすればよいですか?

答えて

8

QApplication::quit()を使用してアプリケーションを手動で閉じることができます。

デフォルトでは、Qt::WA_QuitOnClose属性を持つ最後の最上位ウィンドウが閉じられたときに実行が終了します。 lastWindowClosedquitに接続する必要はありません。デフォルトのsetQuitOnLastWindowClosedの動作を繰り返すためです。 setQuitOnLastWindowClosed(true)を実行する必要はありません。デフォルトではtrueです。投稿したコードは何もしません(何も変更されていない場合)。

考えられる解決策:

  • メインウィンドウの属性を確認してください。おそらくQt::WA_QuitOnCloseという属性が削除されている可能性があります。
  • トップレベルウィンドウにcloseEventを再実装した場合は、クローズイベントが受け入れられていることを確認してください。
  • 隠されていても閉じられていない他のトップレベルウィジェットがあるかどうかを確認してください。それらを表示するにはQApplication::topLevelWidgets()を使用してください。
+0

ありがとう、私はこれを試してみます。私は 'Qt :: WA_QuitOnClose'属性で何もしませんでしたが、' closeEvent() 'を再実装しようとしますが、検索中は何も読みませんでした。 – JBL

+0

いいえ、closeEventを再実装する必要がない場合は、そうしないでください。デフォルトでは正常に動作するはずです。つまり、closeEventを再実装した場合、実装が正しくない可能性があります。 –

+0

ああ、確かに。まあ、私はそれを再実装していない...だから、私はどうしたらいい?私は絶対に 'QApplication :: quit()'に依存する必要がありますか? – JBL

関連する問題