programm wird nicht beendet

Alles zum Qt Framework für Java
Antworten
thalro
Beiträge: 11
Registriert: 7. Juli 2007 17:18

programm wird nicht beendet

Beitrag von thalro »

Hallo,

Ich habe ein problem mit dem beenden meines programms. Ich habe ein GraphicsView, indem zufällig eine bestimmte anzahl von kreisen gezeichnet wird. Alles funktioniert wunderbar, bis ich das fenster schließe. dann läuft der prozess im hintergrund weiter und kann nur noch über das betriebsystem gekillt werden.
ich habe es so verstanden, dass by default die QApplication beendet wird sobald alle fenster zugemacht wurden. bei mir funktioniert das aber irgendwie nicht.
ich habe dann ins hauptfenster ein closeEvent(...) eingebaut. wenn ich darin sage QApplication.exit() oder.quit() passiert auc nichts und der prozess läuft weiter.
wenn ich schreibe System.exit() tut es, aber so sollte das doch nicht sein, oder?


mein verdacht ist, dass es etwas mit dem aufbau meines programms zu tun hat, aber ich kann mir nicht genau erklären was.

es handelt sich um ein kleines spiel.
da die kreise auch per maus gesetzt werden können, ist die funktion, die die kreise setzt kein loop, sondern wird über ein signal aufgerufen. soll heissen, am anfang der funktion kreiseSetzen() wird das signal ,dass diese aufgerufen hat disconnected. dann wird geprüft, ob noch mehr kreise gestzt erden dürfen. wenn ja, wird das signal wieder zu der funktion selber verbunden. setzt nun der user, oder der computer einen kreis , wird das signal gesendet, und die funktion nochmal aufgerufen.

ausserdem befindet sich in der funktion ein Thread.sleep(ms), damit man die kreissetzung des "computergegners" mitverfolgen kann.

was mich am meisten wundert, ist dass in explizites QApplication.exit() den prozess nicht beendet.

jeder komentar willkommen.

danke fürs lesen,

t.
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag von ArneStocker »

es gibt eine Funktion wie

Code: Alles auswählen

QApplication.exitOnLastWindow()
oder so ähnlich (ich habe jetzt nicht nachgesehen). Darüber hinaus könntest Du natürlich auch

Code: Alles auswählen

QApplication.quit()
aufrufen. Das nutzt allerdings dann nichts, wenn Du weitere Threads startest, die dann munter weiterlaufen. Diese müsstest Du selbst beenden. Alternativ kannst Du einem Thread die Eigenschaft 'setDeamon(true)' mitgeben. Der sog. Deamon-Thread wird immer dann beendet, wenn es keinen anderen oder nur noch Deamon-Threads gibt.

Gruß Arne
Antworten