Question

J'essaie de faire 2 fenêtres. 2nd devrait être appelé en 1er. Je ne les connecte pas enfant- > parent. Mais quand j'ai appelé la 2e fenêtre et que je l'ai fermée, la 1re fenêtre s'est également fermée. Que devrais-je faire? Les deux fenêtres sont héritées de QWidget. C ++ et Qt

Désolé pour ma pauvre description. J'ai une fenêtre principale. Classe héritée de QMainWindow. Que j'ai créé la 2ème fenêtre. Classe héritée de QWidget. En premier (fenêtre principale) je crée et appelle la deuxième fenêtre

ConfigWindow *ConfWindow = new ConfigWindow();
ConfWindow->show();

Sans donner de lien au parent. Tout fonctionne bien, mais lorsque je ferme la 2ème fenêtre (config-window), ma fenêtre principale se ferme également. Je n'ai pas besoin de ça. Que dois-je faire pour bloquer la fermeture de la fenêtre principale après la fermeture de la fenêtre de configuration?

J'espère décrire un peu mieux.

Ma première fenêtre contient les drapeaux suivants:

this->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);

Sans eux, tout va bien. Puis-je changer quelque chose si j'ai besoin de drapeaux dans ma fenêtre?

Était-ce utile?

La solution

Vous avez besoin de quelque chose comme:

QApplication app(argc, argv);
app.setQuitOnLastWindowClosed(false);

Voici le programme de test: http://pastebin.com/f5903c5f4 .

Attention, vous devez maintenant explicitement appeler quit (). dans le destructeur de votre fenêtre principale.

Si vous lisez la QApplication :: quitOnLastWindowClosed documentation , vous trouverez que:

  

Si cette propriété a la valeur true, les applications se ferment lorsque la dernière fenêtre principale visible (c'est-à-dire sans fenêtre parent) avec l'ensemble d'attributs Qt :: WA_QuitOnClose est fermée. Par défaut, cet attribut est défini pour tous les widgets sauf les sous-fenêtres

.

Comme votre fenêtre principale est une fenêtre d’outil (sans cadre), elle compte. Cela laisse ConfWindow comme le seul widget de niveau supérieur non-sous-fenêtres. Ainsi, si vous fermez ConfWindow, l’instance d’application se ferme.

Autres conseils

S'il s'agit du code, il y a un énorme bogue dans Qt.
Le code ci-dessus ne doit jamais fermer votre premier Windows, il doit y avoir autre chose qui ne va pas.
L’application est-elle fermée ou se bloque-t-elle?

Remarque
Qui supprime configWindow? Il existe un attribut Qt :: WA_DeleteOnClose qui supprime la fenêtre après sa fermeture.

ConfigWindow *confWindow = new configWindow();
configWindow->setAttribute(Qt::WA_DeleteOnClose, true);
confWindow->show();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top