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)?

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).


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.


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


-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


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


pertanyaannya bukan tentang melepaskan proses baru
rookie coder
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.