Correct way to quit a Qt program?

前端 未结 6 1472
半阙折子戏
半阙折子戏 2020-12-04 08:07

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:

相关标签:
6条回答
  • 2020-12-04 08:42

    If you're using Qt Jambi, this should work:

    QApplication.closeAllWindows();
    
    0 讨论(0)
  • 2020-12-04 08:44

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

    0 讨论(0)
  • 2020-12-04 08:45

    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

    0 讨论(0)
  • 2020-12-04 08:47

    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.

    0 讨论(0)
  • 2020-12-04 08:49

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

    0 讨论(0)
  • 2020-12-04 08:51
    //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";
    

    example

    0 讨论(0)
提交回复
热议问题