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?

War es hilfreich?

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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top