Qt QMainWindow à la fermeture
cela peut sembler une question très simple, mais je veux dump certaines données à chaque fois que le QMainWindow
ferme, j'ai donc utilisé le morceau de code suivant:
QObject::connect(MainWindow.centralwidget, SIGNAL(destroyed()), this, SLOT(close()));
Mais cela ne semble pas faire appel close()
. Je fais ce mal?.
N'est-ce pas le centralwidget suppose d'être détruits?.
Ou peut-être l'application se ferme avant close()
peuvent être appelés?.
Toutes les autres façons de le faire alors?
source d'informationauteur Cenoc | 2010-06-10
Vous devez vous connecter pour publier un commentaire.
Je voudrais essayer QGuiApplication::lastWindowClosed() à la place.
Vous feriez mieux de re mettre en œuvre une fonction virtuelle dans votre principale
MainWindow
classe comme ceci:et puis de déclarer dans le fichier source:
Bonne chance.
Pourriez-vous mettre en œuvre la
closeEvent
fonction de votreQMainWindow
et de mettre votre code?Votre question initiale et le code ne correspondent pas. Si vous voulez faire quelque chose sur le
QMainWindow
créer une sous-classe et de mettrecloseEvent
ou connectez-vous àMainWindow::destroyed()
. Voir le paragraphe 3 pour une remarque cependant.Mais le code est en montrant ce qui semble être une 3ème classe qui est de la connexion d'un enfant de la
MainWindow
détruits pour certains slot appeléclose()
.centralwidget
sera détruit APRÈS la MainWindow est déjà détruit tant de ce plus probable ne vous aidera pas de toute façon.Aussi, cela dépend de la façon dont vous avez créé MainWindow (pile ou le tas) et si vous êtes à la destruction correctement. Idéalement, vous devez créer une sous-classe de
QMainWindow
(qui, si vous avez utilisé le concepteur que vous avez probablement déjà).Mettre en œuvre
QMainWindow::closeEvent(QCloseEvent *)
dans votre classe. Puis de mettre en œuvre un nouveau signal appeléclosing()
et émettent à partir de votre mise en œuvre deQMainWindow::closeEvent()
. Ensuite, vous pouvez vous connecter au signal d'en faire quelque chose juste avant que la fenêtre est fermée. Vous pouvez également utilisercloseEvent
directement à faire ce que vous devez faire, c'est de sauver l'état, de synchronisation de données ou de quoi que ce soit.En Python (pyqt4 ou pyqt5), vous devrez effectuer les opérations suivantes:
Il est intéressant de savoir que les choses dans le closeEvent(..) la fonction est exécuté juste avant la fenêtre se ferme. Vous pouvez le vérifier avec le test suivant:
C'est la sortie dans votre terminal:
Cela prouve que la fenêtre était encore visible lors de l'entrée de la closeEvent(..) la fonction, mais pas après la sortie de cette fonction.
Comment ajouter le code de vidage principale de votre windows destructeur?