Schließen neue nonchild Fenster in Qt
Frage
Ich versuche, 2 Fenster zu machen. 2. sollte in erster aufgerufen werden. Ich verbinde sie nicht Kind-> Eltern. Aber wenn ich 2. Fenster genannt und schloss sie erste Fenster zu geschlossen. Was soll ich machen? Beide Fenster sind inhereted von QWidget. C ++ und Qt
Sorry für meinen schlechten beschreiben. Ich habe ein Hauptfenster. Klasse geerbt von QMainWindow. Das i erstellt 2. Fenster. Klasse geerbt von QWidget. Im ersten (Hauptfenster) Ich erstelle und 2. Fenster Aufruf
ConfigWindow *ConfWindow = new ConfigWindow();
ConfWindow->show();
Ohne Verbindung zu Eltern zu geben. Alles funktioniert gut, aber wenn ich in der Nähe 2. Fenster (config-Fenster) mein Hauptfenster auch schließt. Ich brauche nicht in diesem. Was soll ich tun, schließen Hauptfenster nach config-Fensterschließ zu blockieren.
Hope ein wenig besser beschreiben.
Mein erstes Fenster hat dieses Fahne:
this->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
Ohne sie ist alles in Ordnung. Kann ich etwas ändern, wenn ich in meinem Fenster, dass Flaggen müssen?
Lösung
Sie müssen so etwas wie:
QApplication app(argc, argv);
app.setQuitOnLastWindowClosed(false);
Hier ist das Testprogramm. http://pastebin.com/f5903c5f4
Hüten Sie sich vor, jetzt müssen Sie explizit rufen Sie beenden () im Destruktor des Hauptfensters.
Wenn Sie lesen QApplication :: quitOnLastWindowClosed Dokumentation , werden Sie feststellen, darauf hin, dass:
Wenn diese Eigenschaft wahr ist, beenden die Anwendungen, wenn die letzten sichtbaren Primär Fenster (das heißt Fenster ohne Eltern) mit dem Qt :: WA_QuitOnClose Attribut geschlossen ist. Standardmäßig ist dieses Attribut gesetzt für alle Widgets mit Ausnahme von Unterfenstern
Da Ihr Hauptfenster ein (rahmenlos) Werkzeugfenster ist, ist es zu zählen. Das lässt ConfWindow als die einzigen nicht Unter Fenster der obersten Ebene Widget. Wenn Sie also ConfWindow schließen, es provoziert die Anwendungsinstanz zu beenden.
Andere Tipps
In diesem Code ist, dann gibt es einen riesigen Fehler in Qt.
Der obige Code sollte nie schließen Sie die erste Windows, es ist etwas anderes falsch sein muss.
Ist die Anwendung geschlossen oder ist es zum Absturz?
Hinweis
Wer löscht configWindow? Es gibt ein Qt::WA_DeleteOnClose
Attribut, das das Fenster löscht, nachdem es geschlossen ist.
ConfigWindow *confWindow = new configWindow();
configWindow->setAttribute(Qt::WA_DeleteOnClose, true);
confWindow->show();