eventloop & windows close

Alles rund um die Programmierung mit Qt
Antworten
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

eventloop & windows close

Beitrag von DBGTMaster »

Hallo,

ich stehe vor einem Problem.

Ich habe ein MDI- Fenster, in diesem existiert eine Methode, welche eine Ausführungszeit von etwa 20 Sekunden hat.
Damit, wenn diese Methode aufgerufen wird, nicht die GUI steht, rufe ich ständig ein QCoreApplication::processEvents(); auf.

Funktioniert soweit auch alles gut, nur bis zu einem Problem.

Schließt der Benutzer das MDI- Fenster, während sich die Anwendung in dieser Methode befindet, stürzt mein Programm hab, da diese Methode nun auf nicht mehr existierende Elemente zugreift.

Beispiel:

Code: Alles auswählen

MDIWindow::doSomething() {

... some code ...
# Benutzer schließt jetzt das MDI Fenster
... some code ...
QCoreApplication::processEvents(); // Hier wird nun das Fenster geschlossen, MDIWindow wird somit zerstört.

ui->element;  // Jetzt wird auf ein Element zugegriffen, welches nicht mehr existiert -> Programmabsturz

}
Wie löse ich am besten mein Problem`?
anti-freak
Beiträge: 18
Registriert: 21. Juli 2012 22:54

Re: eventloop & windows close

Beitrag von anti-freak »

die methode als thread starten und ein signal emiten lassen (wenn sie fertig ist), und mit einem slot deines mainwindows oder application connecten.
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Re: eventloop & windows close

Beitrag von DBGTMaster »

Sprich, ich lasse das Fenster erst schließen, wenn meine Methode fertig ausgeführt wurde, oder wie soll ich das nun verstehen?
anti-freak
Beiträge: 18
Registriert: 21. Juli 2012 22:54

Re: eventloop & windows close

Beitrag von anti-freak »

an sich, ja
jedenfalls ist ein manueller aufruf von QCoreApplication::processEvents(); weder schön noch sinnvoll. deswegen, einfach die methode als thread starten, damit sie dein programm nicht weiter behindert.
und dann eben in der mainwindow klasse "closeEvent" überladen, und checken ob der thread noch läuft. wäre zumindest so die einfachste möglichkeit, die mir einfällt. da ich mich mit QThread nicht auskenne, weiß ich nicht genau, wie du sowas checken kannst, allerdings wäre denke ich eine signal/slot methode durchaus machbar.
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Re: eventloop & windows close

Beitrag von DBGTMaster »

Ich hab die perfekte Lösung:

Code: Alles auswählen

QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
Damit wird das Fenster Schließen Event erst ausgeführt, wenn sich das Prorgamm in seiner eigentlichen Loop wieder befindet :)
MasterK
Beiträge: 24
Registriert: 10. November 2009 23:10

Re: eventloop & windows close

Beitrag von MasterK »

Eine Lösung vom Rücken durch die Brust ins Auge...
Der Vorschlag des Threads ist ein guter Ansatz in diesem Fall.
Antworten