QMessageBox::Ok schließt das ganze Programm

Alles rund um die Programmierung mit Qt
Antworten
Johannes
Beiträge: 9
Registriert: 29. Mai 2006 09:33
Kontaktdaten:

QMessageBox::Ok schließt das ganze Programm

Beitrag von Johannes »

Hallo zusammen,

Hoffe, das Thema wurde noch nicht behandelt, mit der Suche konnte ich es jedenfalls nicht finden.

Ich entwickle mit Qt 3.3.5 ein Tool, mit dem ich auf Chipkarten die PIN wechseln kann. (WinXP SP2)

Das Tool an sich funktioniert wunderbar, in einem zusätzlichen Thread werden die Kartenleser auf Änderungen überwacht (ob Karte gesteckt, gezogen, ungültig, usw.). Je nach Zustand aktivieren oder deaktivieren sich Teile des GUIs.

Steckt zu Programmbeginn eine Karte im Leser, bekomme ich eine Nachricht mit einer QMessageBox, welche mich darauf hinweist, dass die Karte noch nicht benutzt wurde und ich eine Werks-PIN eingeben muss. So solls auch sein. Diese MessageBox kann ich auch wunderbar wegklicken, wie es sein muss.

Steckt nun aber zum Programmbeginn noch keine Karte und ich stecke die Karte während des Betriebs, springt mein Thread darauf an, sendet ein entsprechendes Signal und gibt mir die richtige MessageBox. Klicke ich aber bei dieser auf Ok, schließt sich das Programm ohne jegliche Fehlermeldung. Das Kompilieren funktionierte zuvor auch ohne jegliche Fehler.

Ich sitze an dem Problem nun schon mehrere Tage und weiß nicht mehr weiter.
Gibt es da einen bekannten Bug oder liegt der Fehler eher in meinem Code?
Falls ich Code posten soll, sagt mir, welchen Teil. Am Aufruf der MessageBox kanns nicht liegen, da kann man ja nicht viel falsch machen.

Vielen Dank im Voraus!

JOHANNES
Zuletzt geändert von Johannes am 29. Mai 2006 09:56, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Dann debugge doch einfach mal - sollte doch nicht so schwer sein an der Stelle nach der Message-Box einen Breakpoint zu setzen und zu schauen was passiert, oder?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Johannes
Beiträge: 9
Registriert: 29. Mai 2006 09:33
Kontaktdaten:

Beitrag von Johannes »

alles schon gemacht...

Keine Fehler. Das Programm schließt wunderbar und sauber nach der MessageBox. Das Blöde ist eben nur, dass es das da nicht soll.

Kann es sein, dass das Hauptprogramm, den Rückgabewert der MessageBox so interpretiert, dass das Hauptprogramm geschlossen wird?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Johannes hat geschrieben: Kann es sein, dass das Hauptprogramm, den Rückgabewert der MessageBox so interpretiert, dass das Hauptprogramm geschlossen wird?
Das musst du das Hauptprogramm fragen. Dort einen Breakpoint und schauen was passiert. :)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

läuft dein Thread eventuell aus?
Johannes
Beiträge: 9
Registriert: 29. Mai 2006 09:33
Kontaktdaten:

Beitrag von Johannes »

Der Thread wird erst bei Programmende beendet, die Kartenleser müssen ja immer überwacht werden.
Ich vermute, die Fehlerquelle gefunden zu haben, ich melde mich wieder, wenn ich es habe.
Querdenker
Beiträge: 99
Registriert: 1. Dezember 2005 17:44
Wohnort: Karlsruhe

Beitrag von Querdenker »

Hi,

das liegt in main() und in QApplication. Die QMessageBox ist zwar ein Dialog, wird aber von QApplication wie ein MainWidget behandelt wenn es das einzigste Window war.
Wird es geschlossen, so notiert QApplication das beenden des letzten Window und beendet die App.
Diese Eigenschaft lässt sich aber mit einem bool abstellen.

quitOnLastWindowClosed(false);
e Grüssle au
Q... ;)
Johannes
Beiträge: 9
Registriert: 29. Mai 2006 09:33
Kontaktdaten:

Beitrag von Johannes »

Das habe ich auch bereits gesehen. Leider gibt es diese Methode nur für Qt 4.x. Ich verwende noch Qt 3.3.5
Aber trotzdem danke für den Tipp.
Querdenker
Beiträge: 99
Registriert: 1. Dezember 2005 17:44
Wohnort: Karlsruhe

Beitrag von Querdenker »

Hi,

einzigste Alternative für deine Qt-Version: Erstelle einfach ein Widget. Du kannst es verstecken. Wenn die App beendet werden soll, so terminiere einfach das Widget.
Das trickst QApplication aus ;) Auf jedenfall kann dann die App jede MsgBox anzeigen.
e Grüssle au
Q... ;)
Antworten