Reputation: 23489
How should I quit a Qt Program, e.g when loading a data file, and discovered file corruption, and user need to quit this app or re-initiate data file?
Should I:
exit(EXIT_FAILURE)
QApplication::quit()
QCoreApplication::quit()
And difference between (2) and (3)?
Upvotes: 156
Views: 203570
Reputation: 90736
You can call qApp->exit();
. I always use that and never had a problem with it.
If you application is a command line application, you might indeed want to return an exit code. It's completely up to you what the code is.
Upvotes: 33
Reputation: 986
While searching this very question I discovered this example in the documentation.
QPushButton *quitButton = new QPushButton("Quit");
connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::QueuedConnection);
Mutatis mutandis for your particular action of course.
Along with this note.
It's good practice to always connect signals to this slot using a QueuedConnection. If a signal connected (non-queued) to this slot is emitted before control enters the main event loop (such as before "int main" calls exec()), the slot has no effect and the application never exits. Using a queued connection ensures that the slot will not be invoked until after control enters the main event loop.
It's common to connect the QGuiApplication::lastWindowClosed() signal to quit()
Upvotes: 2
Reputation: 11822
QApplication is derived from QCoreApplication and thereby inherits quit()
which is a public slot of QCoreApplication
, so there is no difference between QApplication::quit()
and QCoreApplication::quit()
.
As we can read in the documentation of QCoreApplication::quit()
it "tells the application to exit with return code 0 (success).". If you want to exit because you discovered file corruption then you may not want to exit with return code zero which means success, so you should call QCoreApplication::exit()
because you can provide a non-zero returnCode which, by convention, indicates an error.
It is important to note that "if the event loop is not running, this function (QCoreApplication::exit()) does nothing", so in that case you should call exit(EXIT_FAILURE)
.
Upvotes: 176
Reputation: 7
//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";
Upvotes: -12
Reputation: 49
If you're using Qt Jambi, this should work:
QApplication.closeAllWindows();
Upvotes: 0
Reputation: 1613
if you need to close your application from main() you can use this code
int main(int argc, char *argv[]){
QApplication app(argc, argv);
...
if(!QSslSocket::supportsSsl()) return app.exit(0);
...
return app.exec();
}
The program will terminated if OpenSSL is not installed
Upvotes: -1