Seite 1 von 1

[gelöst] Programm beendet nicht

Verfasst: 24. Juni 2008 18:26
von qtNiko
hi,

mein Qt-Programm wird nicht immer beendet, obwohl das Hauptfenster verschwindet.
So, wie ich die Doku verstehe, sollte ein Programm folgendermaßen beendet werden:

Klick auf Menue "Beenden" ruft den Slot "close()" auf -- so ist es in meinem Constructor definiert (mit connect(...) ).
Laut Doku sollte nun automatisch eine function "closeEvent(QCloseEvent *event)" aufgerufen werden, die man mit eigenem Code beliebig füllen kann. In meiner "closeEvent()" sind folgende Zeilen enthalten:

Code: Alles auswählen

bool fertig = true;
... Code , der ggf. fertig auf false setzt
if(fertig) 
		event->accept();  // Programm beenden
else 
		event->ignore();	// Programm und Fenster weiterlaufen lassen
Warum wird einmal das Programm beendet und dann wieder nicht?

Verfasst: 24. Juni 2008 19:40
von PeterLustig
Ist das Fenster vllt. nur geschlossen und nicht gelöscht (Stichwort: DeleteOnClose)? Dann existiert es ja noch, und kann evtl. wieder angezeigt werden.

Verfasst: 24. Juni 2008 21:08
von qtNiko
tja,
es geht um mein Hauptfenster, und das habe ich standardmäßig erzeugt. Ein WA_DeleteOnClose kommt da nicht vor.
Der Versuch, im Constructor "setAttribute(WA_DeleteOnClose)" einzufügen endet mit der Fehlermeldung "WA_DeleteOnClose was not declared in this scope".
Welches Include-File fehlt denn da?

Hab's gefunden: es muss heißen "setAttribute(Qt::WA_DeleteOnClose)"
Ich hätte mir gewünscht, dass solch ein Verhalten, nämlich Programm beenden bei close(), default ist. Das ist es doch, was man normalerweise braucht. Alles andere sollte extra programmiert werden, na ja . :?

Jetzt hoffe ich, dass sich mein Programm verhält wie gewünscht.

Verfasst: 24. Juni 2008 22:39
von PeterLustig
Programm beenden wenn die Fenster gelöscht werden macht es doch auch.
Aber du schließt die Fenster nur, aber löscht sie nicht. Es kann ja auch sein das du die Fenster später wieder öffnen willst, ohne sie neu zu erstellen.

Das ist schon ganz gut so wie es ist und hat seine Richtigkeit.