web-dev-qa-db-ja.com

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

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

したほうがいい:

  1. exit(EXIT_FAILURE)を呼び出します
  2. QApplication::quit()を呼び出します
  3. QCoreApplication::quit()を呼び出します

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

113
daisy

QApplicationはQCoreApplicationから派生しているため、QCoreApplicationのパブリックスロットであるquit()を継承するため、QApplication::quit()QCoreApplication::quit()の間に違いはありません。

QCoreApplication::quit() itのドキュメントを読むとわかるように、「アプリケーションにリターンコード0(成功)で終了するように伝えます。」 。ファイルの破損を発見したために終了したい場合、成功を意味するリターンコードゼロで終了したくない場合がありますので、 QCoreApplication::exit() を呼び出す必要があります。 、エラーを示します。

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

129
Bill

qApp.exit();を呼び出すことができます。私は常にそれを使用し、問題は一度もありませんでした。

アプリケーションがコマンドラインアプリケーションの場合、実際に終了コードを返すことができます。コードが何であるかは完全にあなた次第です。

29
laurent

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

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

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

//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";

0
user3777664

Qt Jambiを使用している場合、これは機能するはずです。

QApplication.closeAllWindows();
0