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 :

Fermeture de fenetre par bouton


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 13
    Par défaut Fermeture de fenetre par bouton
    Bonjour,

    A partir de ma fenetre principale, "window1", j'ouvre une seconde fenetre "window_assistant_projet".
    Celle-ci se ferme correctement avec la croix.
    Je cherche à la fermer en cliquant sur un bouton.
    Voici le 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
     
    GtkBuilder* create_window_assistant (void);
     
    void    quitter_assistant(GtkButton       *button,		GtkWidget *pFenetre);
     
    GtkBuilder  *  window_assistant_projet   = NULL; // window1
    GtkWidget *p_win_assistant;
     
    void menu_assistant_projet (GtkButton *button, gpointer user_data)
    {
     
     window_assistant_projet = gtk_builder_new ();
       GError      *  p_err       = NULL;
       if (window_assistant_projet != NULL)
       {
    	gtk_builder_add_from_file (window_assistant_projet, "assistant_projet.ui", & p_err);
          if (p_err == NULL)
          {
            p_win_assistant = (GtkWidget *) gtk_builder_get_object (    window_assistant_projet, "fenetre_assistant"  );
            g_signal_connect (gtk_builder_get_object (p_win_assistant, "bouton_quitter_assistant"), "clicked",G_CALLBACK (quitter_assistant), p_win_assistant);
            gtk_widget_show_all (p_win_assistant);
          }
       }
     
    }
     
    GtkBuilder*
    create_window_assistant (void)
    {
          gtk_window_set_title (GTK_WINDOW (window_assistant_projet), _("Assistant de Création du Projet"));
       	return window_assistant_projet;
    }
     
    void    quitter_assistant(GtkButton       *button,		GtkWidget *pFenetre)
    {
    	printf("quitter_assistant\n");
    	gtk_widget_destroy (pFenetre);
    	printf("quitter_assistant fini\n");
    }
    En console, je reçois le message :
    Gtk-CRITICAL **: IA__gtk_widget_destroy: assertion `GTK_IS_WIDGET (widget)' failed
    Merci de votre aide

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 309
    Billets dans le blog
    5
    Par défaut
    Ton code me semble assez confus.

    Tu crées une fonction qui renvoie un GtkBuilder alors que le pointeur renvoyé semble être un GtkWidget*:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    GtkBuilder*
    create_window_assistant (void)
    {
          gtk_window_set_title (GTK_WINDOW (window_assistant_projet), _("Assistant de Création du Projet"));
       	return window_assistant_projet;
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 13
    Par défaut
    Bonjour gerald3d

    Merci de ta réponse.
    Tu as raison, c'est une erreur que j'ai donc corrigée. C'était un reste du passage à gtkbuilder.
    Néanmoins le problème persiste...

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 309
    Billets dans le blog
    5
    Par défaut
    Redonnes-nous ton code modifié pour avoir une vue plus claire du problème.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 13
    Par défaut
    J'ai supprimé la fonction incriminée, tout simplement.

  6. #6
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 309
    Billets dans le blog
    5
    Par défaut
    Tout d'abord tu fais l'impasse sur la libération d'une allocation dynamique dans la fonction suivante :
    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
    void menu_assistant_projet (GtkButton *button, gpointer user_data)
    {
     
     window_assistant_projet = gtk_builder_new ();
       GError      *  p_err       = NULL;
       if (window_assistant_projet != NULL)
       {
    	gtk_builder_add_from_file (window_assistant_projet, "assistant_projet.ui", & p_err);
          if (p_err == NULL)
          {
            p_win_assistant = (GtkWidget *) gtk_builder_get_object (    window_assistant_projet, "fenetre_assistant"  );
            g_signal_connect (gtk_builder_get_object (p_win_assistant, "bouton_quitter_assistant"), "clicked",G_CALLBACK (quitter_assistant), p_win_assistant);
            gtk_widget_show_all (p_win_assistant);
          }
       }
     
    }
    Que se passe-t-il si la fonction gtk_builder_add_from_file(); retourne 0? Et bien rien. La fonction se termine.
    Cependant si tel est le cas p_err est initialisé et comporte des informations liées à cette impossibilité. Il faut libérer la mémoire allouée avec g_error_free();.

    Pour le warning il semblerait que le pointeur p_Fenetre ne soit pas correctement initialisé. es-tu sûr de la récupération de ce pointeur depuis le fichier assistant_projet.ui?

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

Discussions similaires

  1. [Débutant] Fermeture Forms par bouton
    Par jujutix dans le forum Windows Forms
    Réponses: 1
    Dernier message: 22/11/2012, 10h47
  2. [Débutant] Fermeture Forms par bouton et par timer
    Par jujutix dans le forum Windows Forms
    Réponses: 3
    Dernier message: 20/11/2012, 15h19
  3. Fermeture d'une fenetre par la fenetre mere
    Par le_sonic dans le forum MFC
    Réponses: 4
    Dernier message: 10/11/2009, 10h22
  4. affichage popup avant fermeture d'une fenetre par la croix
    Par djolof dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 05/10/2009, 18h57
  5. Réponses: 2
    Dernier message: 04/04/2006, 08h58

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