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

GTK+ avec C & C++ Discussion :

Problème de fermeture


Sujet :

GTK+ avec C & C++

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2012
    Messages : 38
    Par défaut Problème de fermeture
    Bonjour à tous

    J'en profite pour souhaité une bonne année à toute les personnes qui liront ce post .

    Voici mon problème :

    J'ai une application qui possède 2 fenêtres :

    Une principal qui apparait lors du lancement, et la seconde qui apparait lors que l'on clique sur un bouton.

    J'ai également mis une widget pQuestion avec pour question voulez vous quitter.

    Le problème c'est que le code pour fermer la fenêtre principal et la fenêtre secondaire doivent être différent, puisqu'il faut pouvoir fermer la fenetre secondaire sans quitter le problème.

    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
    void on_quitter_btn(GtkWidget* widget, gpointer data)
     {
         GtkWidget *pQuestion;
     
        /* Creation de la boite de message */
         /* Type : Question -> GTK_MESSAGE_QUESTION */
         /* Boutons : 1 OUI, 1 NON -> GTK_BUTTONS_YES_NO */
         pQuestion = gtk_message_dialog_new (GTK_WINDOW(data),
             GTK_DIALOG_MODAL,
             GTK_MESSAGE_QUESTION,
             GTK_BUTTONS_YES_NO,
             "Voulez vous vraiment\nquitter ce programme?");
     
        /* Affichage et attente d une reponse */
         switch(gtk_dialog_run(GTK_DIALOG(pQuestion)))
         {
             case GTK_RESPONSE_YES:
                 /* OUI -> on quitte l application */
                 gtk_main_quit();
                 break;
             case GTK_RESPONSE_NO:
                 /* NON -> on detruit la boite de message */
                 gtk_widget_destroy(pQuestion);
                 break;
         }
     }
    Cependant ce code ne fonctionne pas pour la fenêtre secondaire.

    Voila ma question arrive enfin, comment faire pour fermer la fenêtre secondaire sans fermer la principal.

    Je précise que j'ai tenté le code ci dessus, mais cela marche pas .

    Encore merci à tous.
    Kevin Giroux

  2. #2
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Bonjour et bonne année également,

    si tu as connecté cette callback au signal delete-event des deux fenêtres, ce comportement est logique, puisque tu appelles gtk_main_quit quelle que soit la fenêtre, quittant ainsi tout le programme. Ne connecte cette callback qu'au signal "delete-event" de la fenêtre principale.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2012
    Messages : 38
    Par défaut
    bonjour a toi

    Tous d'abord merci de ta réponse.

    Cependant

    Comment je dois faire pour fermer la deuxième fenêtre ? avec une Pquestion ?

    Ce que je veux faire c'est a chaque fois que l'utilisateur ouvre une nouvelle fenetre, la fonction on_quitter_btn ci dessus permette de demande la confirmation à l'utilisateur.

    L'affichage ce fait pour toute les fenetres, cependant le signal de femerture ne marche pas.

    Ce que je n'ai pas compris c'est comment faire pour que cela marche pour toute.

    Dans la fenetre principal je dois mettre gtk_main_quit, mais pour les autres fenetre je dois mettre quoi ?

    Ce que je cherche dois pouvoir aller dans le code ci dessus et qui sera valable pour toute les futures fenetre.

    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
    void on_quitter_btn(GtkWidget* widget, gpointer data)
     {
         GtkWidget *pQuestion;
     
        /* Creation de la boite de message */
         /* Type : Question -> GTK_MESSAGE_QUESTION */
         /* Boutons : 1 OUI, 1 NON -> GTK_BUTTONS_YES_NO */
         pQuestion = gtk_message_dialog_new (GTK_WINDOW(data),
             GTK_DIALOG_MODAL,
             GTK_MESSAGE_QUESTION,
             GTK_BUTTONS_YES_NO,
             "Voulez vous vraiment\nquitter ce programme?");
     
        /* Affichage et attente d une reponse */
         switch(gtk_dialog_run(GTK_DIALOG(pQuestion)))
         {
             case GTK_RESPONSE_YES:
                 /* OUI -> on quitte l application */
                 gtk_main_quit();
                 break;
             case GTK_RESPONSE_NO:
                 /* NON -> on detruit la boite de message */
                 gtk_widget_destroy(pQuestion);
                 break;
         }
     }

  4. #4
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Ce n'est pas très clair là... Qu'est-ce que tu veux faire exactement ? Tu parles d'ouvrir une nouvelle fenêtre, mais d'en fermer une autre dans la callback... Je ne comprends pas pourquoi tu veux demander à l'utilisateur s'il veut quitter le programme quand il ouvre une nouvelle fenêtre...

    Au passage, le prototype de ta callback est erroné, celui du signal delete-event est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gboolean user_function (GtkWidget *widget, GdkEvent  *event, gpointer   user_data)
    C'est la valeur de retour (TRUE ou FALSE) qui déterminera s'il faut fermer la fenêtre ou pas.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2012
    Messages : 38
    Par défaut
    Bonjour en effet mes propos ne sont plus claire.

    Ce que je souhaite faire et que je n'arrive pas a faire c'est détruire la fenêtre pour laisser place à une autre fenêtre derrière.

    Par exemple

    J'ai ma fenêtre 1 avec 3 bouton

    inscription
    connexion
    quittez

    Le bouton inscription lorsque je cliquerai dessus détruira la fenêtre 1 pour laisser place à la fenêtre 2

    il en est de même avec le bouton connexion qui laisserai place a une fenêtre 3.

    Secondo ce que je souhaiterai faire également :

    C'est demander a l'utilisateur une confirmation lorsqu'il souhaite quittez la page lors du clique sur la croix rouge.

    Si la confirmation est Oui on detruit la page si elle est NON on detruit rien.

    Sachant que si on détruit la page cela implique un arrêt du programme .

    Je sais pas si cela est plus clair?

    Pour moi la code que j'ai donnée doit faire office de vérification c'est à dire la seconde opération cependant elle ne le fait pas.

    Cordialement

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2012
    Messages : 38
    Par défaut
    Finalement je crois que j'ai résolu mon problème :
    j'utilise sa

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_signal_connect(G_OBJECT(pButton[1]),"clicked",G_CALLBACK(on_quitter_btn),G_OBJECT(pWindow));
    et la fonction

    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
    void on_quitter_btn(GtkWidget* pWindow, gpointer data)
     {
         GtkWidget *pQuestion;
     
        /* Creation de la boite de message */
         /* Type : Question -> GTK_MESSAGE_QUESTION */
         /* Boutons : 1 OUI, 1 NON -> GTK_BUTTONS_YES_NO */
         pQuestion = gtk_message_dialog_new (GTK_WINDOW(data),
             GTK_DIALOG_MODAL,
             GTK_MESSAGE_QUESTION,
             GTK_BUTTONS_YES_NO,
             "Voulez vous vraiment\nquitter ce programme?");
     
        /* Affichage et attente d une reponse */
         switch(gtk_dialog_run(GTK_DIALOG(pQuestion)))
         {
             case GTK_RESPONSE_YES:
                 /* OUI -> on quitte l application */
                gtk_widget_destroy((GtkWidget*)data);
                 break;
             case GTK_RESPONSE_NO:
                 /* NON -> on detruit la boite de message */
                 gtk_widget_destroy(pQuestion);
                 break;
         }
     }
    et pour détruire la fenêtre précédente :
    gtk_widget_destroy((GtkWidget*)data);
    dans la fonction qui est appelle par le bouton en question

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

Discussions similaires

  1. [MFC] CSocket ... problème à la fermeture
    Par Yellowmat dans le forum MFC
    Réponses: 7
    Dernier message: 29/04/2005, 15h37
  2. [TQuery] problème de fermeture
    Par mammistegon dans le forum Bases de données
    Réponses: 5
    Dernier message: 29/01/2005, 18h15
  3. [Thread][socket]Problème de fermeture d'un thread
    Par meda dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 04/11/2004, 01h03
  4. Problème de fermeture de l'application
    Par SkyDev dans le forum Langage
    Réponses: 2
    Dernier message: 16/06/2004, 02h06
  5. Problème de fermeture de balise <tr>
    Par nuage dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 18/03/2004, 09h55

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