Seite 1 von 1

eventloop & windows close

Verfasst: 1. März 2013 13:58
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`?

Re: eventloop & windows close

Verfasst: 1. März 2013 14:02
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.

Re: eventloop & windows close

Verfasst: 1. März 2013 14:08
von DBGTMaster
Sprich, ich lasse das Fenster erst schließen, wenn meine Methode fertig ausgeführt wurde, oder wie soll ich das nun verstehen?

Re: eventloop & windows close

Verfasst: 1. März 2013 14:18
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.

Re: eventloop & windows close

Verfasst: 1. März 2013 15:12
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 :)

Re: eventloop & windows close

Verfasst: 2. März 2013 00:39
von MasterK
Eine Lösung vom Rücken durch die Brust ins Auge...
Der Vorschlag des Threads ist ein guter Ansatz in diesem Fall.