Qtプログラムを終了する正しい方法は?


129

Qtプログラムを終了するにはどうすればよいですか。たとえば、データファイルを読み込んでファイルの破損を発見した場合、ユーザーはこのアプリを終了するかデータファイルを再起動する必要がありますか?

したほうがいい:

  1. コール exit(EXIT_FAILURE)
  2. コール QApplication::quit()
  3. コール QCoreApplication::quit()

(2)と(3)の違いは?

回答:


145

QApplicationはQCoreApplication由来し、それによって継承されるquit()のパブリックスロットであるQCoreApplicationので、差がないQApplication::quit()とはQCoreApplication::quit()

我々は、のドキュメントで読むことができるようQCoreApplication::quit()、それを「戻りコード0(成功)で終了したアプリケーションを通知します。」。ファイルの破損を発見したために終了する場合は、成功を意味する戻りコード0で終了したくないQCoreApplication::exit()場合があります。そのため、規則によりエラーを示す非ゼロのreturnCodeを提供できるため、呼び出す必要があります。

「イベントループが実行されていない場合、この関数(QCoreApplication :: exit())は何もしない」ことに注意することが重要ですexit(EXIT_FAILURE)。その場合は、を呼び出す必要があります。


30

あなたが呼び出すことができますqApp.exit();。私はいつもそれを使っており、問題はありませんでした。

アプリケーションがコマンドラインアプリケーションの場合、実際に終了コードを返したい場合があります。コードの内容は完全にあなた次第です。


3
私は次のことをする必要がありました:qApp->exit();
フレデリック・オリンジャー


-2

main()からアプリケーションを閉じる必要がある場合は、このコードを使用できます

int main(int argc, char *argv[]){
QApplication app(argc, argv);
...
if(!QSslSocket::supportsSsl()) return app.exit(0);
...
return app.exec();
}

OpenSSLがインストールされていない場合、プログラムは終了します


1
これはコンパイルできないと思います。app.exit(0)はintを返しません。を使用しif(!QSslSocket::supportsSsl()) {return 0;};ます。この行ではapp.exec()が呼び出されていないため、app.exit(0)は何もしません。QCoreApplication:: exit()のドキュメントを参照してください。イベントループが実行されていない場合、この関数は何もしません。
Sacha Guyer

-3
//How to Run App

bool ok = QProcess::startDetached("C:\\TTEC\\CozxyLogger\\CozxyLogger.exe");
qDebug() <<  "Run = " << ok;


//How to Kill App

system("taskkill /im CozxyLogger.exe /f");
qDebug() << "Close";


問題は新しいプロセスを切り離すことではありません
新人コーダー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.