IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Cacher une QMdiSubWindow au lieu de la détruire

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Juin 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Juin 2006
    Messages : 122
    Par défaut Cacher une QMdiSubWindow au lieu de la détruire
    Hoy \o

    Je me suis lancé dans Qt depuis hier pour réaliser un éditeur de jeu. J'ai une bonne idée de ce à quoi l'éditeur ressemblera, mais j'ai quelques lacunes vu que je commence tout juste Qt. :p

    Alors une question !

    J'ai ma fenêtre principale, un joli QMainWindow, dans lequel j'ai inséré un QMdiArea, histoire d'avoir plein de sous-fenêtre flottantes pour mon éditeur. (Editeur d'images, d'IA, de niveau, etc...)

    Chaque fenêtre est unique et instanciée une fois. Lorsque je l'ouvre via un joli menu, ça fait un appel au slot show() de mon QMdiWindow et fait apparaitre la fenêtre, toute prête a utiliser. Maintenant, j'aimerai pouvoir la masquer, pour ça j'aimerai qu'elle se masque lorsque je clique sur la croix en haut a droite de la fenêtre.

    Et là, bah je vois pas, je n'ai pas trouvé de signal spécifique à cette croix. J'ai essayé de surcharger le slot close(), sans effet. Lorsque je ferme la fenêtre, puis la réouvre avec le menu, elle se retrouve vide! Tout les QWidget à l'intérieur ne s'affichent plus!

    D'où ma question : comment dois-je faire pour qu'un clique sur cette croix de fermeture ne détruise pas ma fenêtre mais se contente de la cacher?

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 136
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    J'ai regardé dans la documentation du QMdiSubWindow. Comme je le pensais cela hérite d'un QWidget. Comme vous l'avez dit, vous avez la méthode close(). Mais celle ci demande la fermeture de la fenêtre.
    En fait, lorsque l'on regarde la doc du close(), on voitu ne référence à un QCloseEvent().
    Un code d'exemple est donné:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     void MainWindow::closeEvent(QCloseEvent *event)
     {
         if (maybeSave()) {
             writeSettings();
             event->accept();
         } else {
             event->ignore();
         }
     }
    Je pense que celui ci est très explicite. Juste au cas ou, vous l'avez déjà deviner, il faudra remplacer le 'writeSettings()' par un this->hide() pour cacher la fenêtre .
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Juin 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Juin 2006
    Messages : 122
    Par défaut
    Et c'est bien ça! J'ai réécrit la fonction pour que ça fasse mon hide(), et ça marche. J'avais pas du tout songé à voir du coté des protected.

    Merci bien pour la solution!

  4. #4
    Invité de passage
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 1
    Par défaut
    Bonjour,

    J'ai exactement le même problème mais je ne vois pas en quoi la réponse de LittleWhite a aidé Spidyy.

    J'avais en effet trouvé cette solution dans le doc de Qt mais elle redéfinit la fonction closeEvent de la fenêtre principale, par des QMidSubWindow.

    Dans mon cas, j'ai une fenêtre principale avec dedans des sous-fenêtres. Je souhaiterais réécrire la fonction closeEvent pour pourvoir demander confirmation lorsque l'utilisateur tente de femer une QMidSubWindow.

    Chez moi, la solution de LittleWhite permet de demander confirmation lors de la fermeture de la fenêtre principale.

    Comment faire ?

    Merci

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Bonjour,

    J'ai exactement le même problème mais je ne vois pas en quoi la réponse de LittleWhite a aidé Spidyy.

    J'avais en effet trouvé cette solution dans le doc de Qt mais elle redéfinit la fonction closeEvent de la fenêtre principale, par des QMidSubWindow.

    Dans mon cas, j'ai une fenêtre principale avec dedans des sous-fenêtres. Je souhaiterais réécrire la fonction closeEvent pour pourvoir demander confirmation lorsque l'utilisateur tente de femer une QMidSubWindow.

    Chez moi, la solution de LittleWhite permet de demander confirmation lors de la fermeture de la fenêtre principale.

    Comment faire ?

    Merci
    C'est la méthode closeEvent() de ta classe héritant de QMdiSubWindow qu'il faut redéfinir, pas celle héritant de QMainWindow.

    G.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. cacher une fenetre externe a l'application
    Par gaut dans le forum Windows
    Réponses: 4
    Dernier message: 13/12/2004, 14h38
  2. cacher une variable
    Par mamouna dans le forum ASP
    Réponses: 3
    Dernier message: 02/09/2004, 15h46
  3. cacher une fenêtre MDI
    Par briscard dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/06/2004, 15h12
  4. [C#] Cacher une colonne d'une dataGrid
    Par royrremi dans le forum ASP.NET
    Réponses: 2
    Dernier message: 27/05/2004, 16h00
  5. [Rave] Cacher une bande a la dernière page
    Par fateh1970 dans le forum Rave
    Réponses: 5
    Dernier message: 31/03/2004, 21h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo