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 :

Interception de la fermeture de la fenêtre

  1. #1
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 541
    Points : 43 416
    Points
    43 416
    Par défaut Interception de la fermeture de la fenêtre
    Bonsoir,

    Je cherche à intercepter la fermeture de ma fenêtre pr la croix de façon à demander une confirmation de la même façon que via le menu que j'ai fait ( qui fonctionne ), et même réutiliser ma routine sortie si possible.

    J'ai un prob de gestion de signal, j'ai essayé en reprenant plusieurs exemple, et là je cherche pour pas grand chose à mon avis.

    Voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
     
    main.cpp :
     
    /*
     
    Pour compiler :
     
    qmake -project
    qmake 
     
    Le makefile est alors crée
     
    puis faire :
    make
     
    */
     
    #include "mycode.h"
     
     
    int main(int argc, char *argv[])
    {
     
    	QApplication app(argc, argv);
     
    	Mycode mycode;
     
    	int largeur_ecran=QApplication::desktop()->width();
    	int hauteur_ecran = QApplication::desktop()->height();
     
    	mycode.setGeometry(largeur_ecran/4,hauteur_ecran/4,largeur_ecran/2,hauteur_ecran/2);
    	mycode.setWindowTitle("Enos");
     
    	mycode.show();
     
    	return app.exec();
    } 
    mycode.h :
     
    #include <QApplication>
    #include <QtGui>
    #include <QLabel>
    #include <QMainWindow>
    #include <QMenu>
    #include <QMenuBar>
    #include <QCloseEvent>
     
    class Mycode : public QMainWindow
    {
      Q_OBJECT
    public:
    	Mycode()
    	{
    	  QMenuBar* menubar=new QMenuBar(this);
              QMenu* menufile=new QMenu("Fichier");
    	  menubar->addMenu(menufile);
    	  menufile->addAction("&Quitter",this,SLOT(sortie()));
    	  setMenuBar(menubar);
    	  QHBoxLayout* hboxlayout=new QHBoxLayout;
    	  QWidget *zonecentrale=new QWidget;
    	  zonecentrale->setLayout(hboxlayout);
    	  setCentralWidget(zonecentrale);
     
    	  QLabel* label=new QLabel("<center>Essai</center>");
    	  label->setGeometry(10,10,10,10);
    	  hboxlayout->addWidget(label);	
     
    	  QObject::connect(mycode,SIGNAL(close()),this,SLOT(sortie));
     
    	}
    public slots:
    	void sortie()
    	{
    	int reponse;
    		reponse=QMessageBox::question(this,"titre","test",QMessageBox::Yes|QMessageBox::No);
    		if (reponse==QMessageBox::Yes) QApplication::quit();
    	};
     
    };
    Merci pour votre aide.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    Bonsoir,

    C'est normal que tu aies un souci, le signal close() n'existe pas ! close() est un slot.

    Ce qu'il te faut, c'est redéfinir le closeEvent().

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 541
    Points : 43 416
    Points
    43 416
    Par défaut c'est bon ça fonctionne
    Merci pour la piste.

    Mais comme pour moi, "surcharger closeevent" n'était pas assez clair, j'ai galéré à y arriver. Je n'utilises donc plus connect.

    Je mets mon code fonctionnel pour ceux qui sont dans ma situation, en espérant éclairer la lanterne d'autres personnes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    #include <QApplication>
    #include <QtGui>
    #include <QLabel>
    #include <QMainWindow>
    #include <QMenu>
    #include <QMenuBar>
    #include <QCloseEvent>
     
    class Mycode : public QMainWindow
    {
      Q_OBJECT
     
    public:
    	Mycode()
    	{
    	  QMenuBar* menubar=new QMenuBar(this);
              QMenu* menufile=new QMenu("Fichier");
    	  menubar->addMenu(menufile);
    	  menufile->addAction("&Quitter",this,SLOT(sortie()));
    	  setMenuBar(menubar);
    	  QHBoxLayout* hboxlayout=new QHBoxLayout;
    	  QWidget *zonecentrale=new QWidget;
    	  zonecentrale->setLayout(hboxlayout);
    	  setCentralWidget(zonecentrale);
     
    	  QLabel* label=new QLabel("<center>Essai</center>");
    	  label->setGeometry(10,10,10,10);
    	  hboxlayout->addWidget(label);	
     
    //	  connect(this,SIGNAL(closeEvent()),this,SLOT(sortie));
     
    	}
     
    void closeEvent(QCloseEvent* event)
    {
    int valeur;
    	valeur=sortie();
    	if (valeur==QMessageBox::Yes)
    	{
    		event->accept();
    	}
    	else
    	{
    		event->ignore();
    	}
    }
     
    public slots:
    	int sortie()
    	{
    	int reponse;
    		reponse=QMessageBox::question(this,"titre","test",QMessageBox::Yes|QMessageBox::No);
    		if (reponse==QMessageBox::Yes) QApplication::quit();
    		return reponse;
    	};
     
    };
    Le main.cpp se trouve dans les autres POSTs
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut closeevent
    j'ai eu le même problème est voilà comment j'ai fait:
    en fait j'ai simplement défini une fonction qui s'appelle closeEvent dans ma class et ça fonctionne.(je n'ai fait aucun connect, ca semble fonctionner tout seul)

    void maClass::closeEvent(QCloseEvent *event)
    {

    int rep = QMessageBox::question(this,"Fermer le progarmme","Voulez vous vraiment fermer le programme?",QMessageBox::Yes,QMessageBox::No);
    switch(rep)
    {
    case QMessageBox::Yes:
    event->accept();
    break;
    case QMessageBox::No:
    event->ignore();
    break;
    default:
    break;
    }

    }

    et dans le .h
    class maClass : public QMainWindow
    {
    ...
    protected:
    void closeEvent(QCloseEvent *event);
    ...
    };

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

Discussions similaires

  1. Comment intercepter la fermeture d'une fenêtre
    Par Claude_Azoulai dans le forum Visual Studio
    Réponses: 2
    Dernier message: 28/03/2011, 18h02
  2. Fermeture d'une fenêtre .dos
    Par VirginieGE dans le forum Windows
    Réponses: 2
    Dernier message: 03/06/2005, 13h56
  3. executer une fonction à la fermeture d'une fenêtre
    Par Oluha dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 22/02/2005, 09h46
  4. Arrêter un ttmt en cours, lors de la fermeture d'une fenêtre
    Par teska dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/12/2004, 14h08
  5. Interception de la fermeture de session
    Par xoris dans le forum C++Builder
    Réponses: 8
    Dernier message: 10/12/2004, 19h50

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