Aufruf einer Methode beim Beenden einer QT Applikation



  • Hallo,
    ich möchte bei einem Fenster(QMainWindow) beim Schliessen vorher eine Funktion aufrufen. Man kann das Fenster über das X oben rechts oder über das Menü Dateien->Beenden. Habe es implementiert und es funktioniert. Jedoch würde ich gerne wissen, ob es auch eine elegantere Lösung gibt. In dem Fall wird beim Schliessen des Programm vorher eine Mesagebox angezeigt. Anbei der Code:

    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        connect(ui->actionExit, &QAction::triggered, this, [=](){
              quit();
        });
    }
    ...
    
    void MainWindow::quit()
    {
        QMessageBox msgBox;
        msgBox.setText("The document has been modified.");
        msgBox.exec();
        QApplication::quit();
    
    }
    
    void MainWindow::closeEvent(QCloseEvent *event)
    {
        event>ignore();
        quit();
    }
    


  • Du musst nur für dein MainWindow den Event-Handler für das QCloseEvent überschreiben. Aus der Doku:
    The event handler QWidget::closeEvent() receives close events. The default implementation of this event handler accepts the close event. If you do not want your widget to be hidden, or want some special handling, you should reimplement the event handler and ignore() the event.
    EDIT:
    Hast du ja eh gemacht. Dann schiebst du noch den Code aus deinem quit() ins closeEvent und fügst am ende noch event->accept(); ein. void MainWindow::quit() brauchst du nicht, das connect auch nicht.



  • Vielen Dank. Das klappt.


Log in to reply