Bir Qt programından çıkmanın doğru yolu?


129

Bir Qt Programından nasıl çıkmalıyım, örneğin bir veri dosyası yüklerken ve dosyanın bozulduğunu fark ettim ve kullanıcının bu uygulamadan çıkması veya veri dosyasını yeniden başlatması gerekiyor?

Yapmalımıyım:

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

Ve (2) ve (3) arasındaki fark?

Yanıtlar:


146

QApplication, QCoreApplication'dan türetilmiştir ve bu nedenle quit()genel bir yuvası olanı miras alır QCoreApplication, bu nedenle QApplication::quit()ve arasında hiçbir fark yoktur QCoreApplication::quit().

Dokümantasyonunda okuyabileceğimiz QCoreApplication::quit()gibi "uygulamaya dönüş kodu 0 (başarılı) ile çıkmasını söyler." . Eğer dosya bozulmasını keşfettiğiniz için çıkmak istiyorsanız, o zaman dönüş kodu sıfır ile çıkmak istemeyebilirsiniz, bu da başarı anlamına gelir, bu yüzden çağırmalısınız QCoreApplication::exit()çünkü kural olarak bir hatayı gösteren sıfır olmayan bir returnCode sağlayabilirsiniz.

Dikkat etmek önemlidir "does hiçbir şey olay döngü çalışır durumda değilse, bu işlev (() QCoreApplication :: exit)" böylece bu durumda size aramalısınız, exit(EXIT_FAILURE).


30

Arayabilirsin qApp.exit();. Ben her zaman bunu kullanıyorum ve hiç sorun yaşamadım.

Uygulamanız bir komut satırı uygulamasıysa, gerçekten bir çıkış kodu döndürmek isteyebilirsiniz. Kodun ne olduğu tamamen size kalmış.


3
Aşağıdakileri yapmam gerekiyordu:qApp->exit();
Frederick Ollinger


-2

uygulamanızı main'den () kapatmanız gerekirse, bu kodu kullanabilirsiniz

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

OpenSSL kurulu değilse program sona erecek


1
Bunun derlenmediğini düşünüyorum. app.exit (0) bir int döndürmez. Kullanın if(!QSslSocket::supportsSsl()) {return 0;};. App.exec () bu satırda çağrılmadığından, app.exit (0) hiçbir şey yapmaz, QCoreApplication :: exit () belgelerine bakın: Olay döngüsü çalışmıyorsa, bu işlev hiçbir şey yapmaz.
Sacha Guyer

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

misal


soru yeni süreçleri ayırmakla ilgili değil
çaylak kodlayıcı
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.