Cara yang benar untuk keluar dari program Qt?

129

Bagaimana saya harus keluar dari Program Qt, misalnya ketika memuat file data, dan menemukan file korupsi, dan pengguna harus keluar dari aplikasi ini atau memulai kembali file data?

Haruskah saya:

  1. panggilan exit(EXIT_FAILURE)
  2. panggilan QApplication::quit()
  3. panggilan QCoreApplication::quit()

Dan perbedaan antara (2) dan (3)?

bunga aster
sumber

Jawaban:

145

QApplication diturunkan dari QCoreApplication dan dengan demikian mewarisi quit()yang merupakan slot publik QCoreApplication, jadi tidak ada perbedaan antara QApplication::quit()dan QCoreApplication::quit().

Seperti yang dapat kita baca di dokumentasi QCoreApplication::quit()itu "memberitahu aplikasi untuk keluar dengan mengembalikan kode 0 (berhasil)." . Jika Anda ingin keluar karena Anda menemukan file rusak maka Anda mungkin tidak ingin keluar dengan kode kembali nol yang berarti sukses, jadi Anda harus memanggil QCoreApplication::exit()karena Anda dapat memberikan kode pengembalian non-nol yang, menurut konvensi, menunjukkan kesalahan.

Penting untuk dicatat bahwa "jika loop acara tidak berjalan, fungsi ini (QCoreApplication :: exit ()) tidak melakukan apa-apa" , jadi dalam hal ini Anda harus menelepon exit(EXIT_FAILURE).

Tagihan
sumber
30

Anda bisa menelepon qApp.exit();. Saya selalu menggunakannya dan tidak pernah punya masalah dengan itu.

Jika aplikasi Anda adalah aplikasi baris perintah, Anda mungkin memang ingin mengembalikan kode keluar. Terserah Anda apa kodenya.

laurent
sumber
3
Saya perlu melakukan yang berikut ini:qApp->exit();
Frederick Ollinger
0

Jika Anda menggunakan Qt Jambi, ini akan berfungsi:

QApplication.closeAllWindows();
Durgarao Maruboina
sumber
-2

jika Anda perlu menutup aplikasi dari main () Anda dapat menggunakan kode ini

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

Program akan dihentikan jika OpenSSL tidak diinstal

Petr Tripolsky
sumber
1
Saya pikir ini tidak dikompilasi. app.exit (0) tidak mengembalikan int. Gunakan if(!QSslSocket::supportsSsl()) {return 0;};. Karena app.exec () belum dipanggil di baris ini, app.exit (0) tidak melakukan apa-apa, lihat dokumentasi QCoreApplication :: exit (): Jika loop acara tidak berjalan, fungsi ini tidak melakukan apa-apa.
Sacha Guyer
-4
//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";

contoh

pengguna3777664
sumber
pertanyaannya bukan tentang melepaskan proses baru
rookie coder