QThread und QCustomEvent
Verfasst: 19. Juli 2007 19:49
Hallo zusammen,
ich habe folgende Situation (unter Qt 3.3.7): In einer von QThread abgeleiteten Klasse poste ich ein QCustomEvent
In meiner GUI-Klasse fange ich diese Event auf und erhöhe den Fortschritt in einem QProgressDialog
Das geht auch die ganze Zeit gut. Wenn die Threads beendet sind rechne ich noch ein bisschen und schließe dann den QProgressDialog mit
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
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 ) );
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");
}
}
}
Code: Alles auswählen
_pProgressDialog->close( true );
_pProgressDialog = NULL;
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