Problem mit verstecktem QMainWindow: Anwendung stürzt ab, nachdem QMessageBox angezeigt wurde

8
%Vor%

Ich klicke auf das Fenster - es versteckt sich und QMessageBox erscheint. Ich klicke auf "OK" - Anwendung beendet, und MainWindow Destruktor wird nicht aufgerufen. Warum endet die Anwendung? Vielleicht habe ich etwas verpasst? Qt 4.7.0, Linux.

... Ups! Es sieht so aus, als hätte ich gefunden, was ich brauche.

%Vor%

Wenn ich es brauche, beende ich die App mit a.exit (0). Aber ich verstehe immer noch nicht, was falsch war.

Ja! Sieht so aus, als ob ich verstehe, was falsch war. Das sind Informationen über die Methode

QApplication::quitOnLastWindowClosed(bool) :

Diese Eigenschaft enthält, ob die Anwendung implizit beendet wird, wenn das letzte Fenster geschlossen wird. Der Standardwert ist wahr. Wenn diese Eigenschaft true ist, wird die Anwendung beendet, wenn das letzte sichtbare primäre Fenster (dh Fenster ohne Parent) mit dem Attribut Qt :: WA_QuitOnClose angezeigt wird Satz ist geschlossen. Standardmäßig ist dieses Attribut für alle Widgets mit Ausnahme von Unterfenstern festgelegt. Eine detaillierte Liste der Qt :: Window-Objekte finden Sie in Qt :: WindowType.

Nachdem QMainWindow ausgeblendet wurde, gibt es keine sichtbaren Fenster. Wenn QMessageBox geschlossen ist, wird Anwendung beendet .

    
Andrey Moiseev 25.02.2011, 11:05
quelle

2 Antworten

3

Das Problem scheint folgender zu sein: Wenn das Dialogfeld geschlossen wird, denkt die Anwendung, dass keine weiteren Fenster geöffnet sind ( setQuitOnLastWindowClosed verweist auf sichtbare Fenster der obersten Ebene), damit es beendet wird. Der Destruktor Ihres Fensters wird nicht aufgerufen, weil Sie das Objekt nie löschen!

Dies sollte die Nachricht ausdrucken:

%Vor%

Alternativ können Sie die Anwendung als Elternteil des Fensters festlegen

    
king_nak 25.02.2011, 14:27
quelle
2

Ich bin mir nicht sicher, aber ich denke, wenn QMessageBox geschlossen wurde, versucht es, den Fokus auf seinen Eltern (Your MainWindow) zurückzubringen, der versteckt ist. Dieser Vorgang schlägt fehl, und das System gibt eine Ausnahme aus.

    
firescreamer 25.02.2011 14:11
quelle

Tags und Links