Qt, nach Hauptschliefe noch etwas tun



  • Ich habe eine main, die etwa so aussieht:

    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
        return a.exec();
    }
    

    Ich müsste NACHDEM die Applikation beendet wird noch ein paar Sachen aufräumen,
    es reicht nicht wenn alle Fenster weg sind, sondern es muss tatsächlich das ganze Programm beendet werden.

    Wie kann ich da noch was machen?



  • Das Programm wird genau in dem Moment beendet, wo du die return-Anweisung aus der main() aufrufst, danach passieren nur noch Aufräumarbeiten. Eventuell würde es ja ausreichen, wenn du deine Arbeiten nach dem exec()-Aufruf unterbringst, aber die sicherere Methode dürfte in einem Destruktor sein.

    PS: "nach" dem Programmende kannst du im Quelltext nichts mehr machen, bestenfalls "während" der Programm-Beendigung.



  • So ganz durchschaue ichs noch nicht:

    mit der exec()-Funktion startet doch die Eventschleife von QT?
    Dann kann ich davor noch nichts löschen, schließlich brauche ich es noch.
    Danach kann ich auch nichts mehr machen, ist ja return.

    Oder kann ich statt return a.exec() auch einfach int x = a.exec() schreiben und danach noch etwas tun?

    Oder muss ich irgendwie das QCoreApplication::quit() abfangen/überschreiben?



  • shisha schrieb:

    Oder kann ich statt return a.exec() auch einfach int x = a.exec() schreiben und danach noch etwas tun?

    Genau so hatte ich das gemeint. Aber die elegantere Möglichkeit sind wie gesagt die Destruktoren der Objekte, die zwischendurch angelegt wurden (z.B. der der MainWindow-Klasse).



  • so ich hab keine lust grad nen neuen thread zuerstellen

    Eine Library, die ich verwende hat eine Funktion, die mit
    "important! call once per frame"
    ausgeschildert ist.

    An welcher Stelle meines Programmes kann ich so eine "Endlosschleife bis das Programm beendet wird" noch unterbringen?

    Muss ich einen eigenen Thread dafür erstellen? (ist dann wahrscheinlich nicht ganz synchron, dürfte aber ausreichen)

    Oder muss ich ein Event erzeugen, welches die Funktion ausführt?



  • Thread


Anmelden zum Antworten