QThread und QCustomEvent

Alles rund um die Programmierung mit Qt
Antworten
Eddie
Beiträge: 14
Registriert: 17. Juli 2007 19:36

QThread und QCustomEvent

Beitrag von Eddie »

Hallo zusammen,

ich habe folgende Situation (unter Qt 3.3.7): In einer von QThread abgeleiteten Klasse poste ich ein QCustomEvent

Code: Alles auswählen

// in .h
enum eEventType {
ProgressEvent = 1001, ///< Fortschritt um eine Stufe.
FinishedEvent = 1002  ///< Thread wurde beendet
};

// in .cpp
QApplication::postEvent( _pParent, new QCustomEvent( eEventType::ProgressEvent ) );
In meiner GUI-Klasse fange ich diese Event auf und erhöhe den Fortschritt in einem QProgressDialog

Code: Alles auswählen

void MyGui::customEvent(QCustomEvent *event)
{
	if ( (int)event->type() == MyThread::eEventType::ProgressEvent ) {
		if ( _pProgressDialog ) {
			_iProgressStep++;
			_pProgressDialog->setProgress( _iProgressStep );
		} else {
			qDebug("Dialog weg");
		}
	}
}
Das geht auch die ganze Zeit gut. Wenn die Threads beendet sind rechne ich noch ein bisschen und schließe dann den QProgressDialog mit

Code: Alles auswählen

_pProgressDialog->close( true );
_pProgressDialog = NULL;
Wird der Slot, der die letzten Berechnungen durchgeführt hat beendet. Kommt in MyGui::customEvent() nochmal eine Event vom Typ ProgressEvent an und die Applikation stürzt mit Speicherzugriffsfehler ab. Visual Studion markiert die Zeile mit setProgress() als die letzte aufgerufene. Dies obwohl _pProgressDialog ein Nullzeiger ist.

Kann ich das Event irgendwie ignorieren?
Wo kommt das so spät noch her (ich habe es schon mit einem QApplication::processEvents() versucht)?

Gruß, Ed
Antworten