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 :

Trouver un child d'un containeur (box)


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 92
    Par défaut Trouver un child d'un containeur (box)
    Bonjour!

    Je souhaiterais récupèrer un pointeur vers un widget contenu dans une vbox. J'ai regardé dans les fichiers includes et j'ai vu que chaque containeur avait un pointeur vers ses enfants.

    Ma question est donc: comment récupèrer un enfant à partir du widget parent? (pour éviter de stocker tous les pointeurs).

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 92
    Par défaut
    Tout d'abord : merci!

    J'ai regardé ça et j'ai essayé de récupèrer le premier child par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //vbox est une ... vbox ayant des child
    gpointer ptr;
    GList *liste;
    liste = gtk_container_get_children(GTK_CONTAINER(vbox));
    ptr = g_list_nth_data(liste, 0);
     
    //Le problème c'est que la ligne suivante ne change rien :(
    gtk_image_set_from_file(GTK_IMAGE(ptr), "test.png");
    Ca plante ... (dire que j'aime pas les gens qui postent leurs erreurs ^^)
    C'est mon appel à ta fonction d'ailleurs qui plante, même si je comprend pas pourquoi je cherche...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 92
    Par défaut
    Enfait j'ai compris : je ne peut pas utiliser cette fonction directement avec une vbox car ce n'est pas un GtkContainer...

    Seulement, même en utilisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GtkWidget *widget;
    widget = GTK_WIDGET(g_list_nth_data((GTK_BOX(vbox))->children, 3));
    gtk_image_set_from_file(GTK_IMAGE(widget), "test.png");
    L'image de mon widget ne change pas... (mais c'est déjà bien : ça plante pas)

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par @drien
    ... car ce n'est pas un GtkContainer...
    Je ne serais pas aussi affirmatif que tu l'est Si tu regarde la hiérarchie des widgets:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      GObject
       +----GtkObject
             +----GtkWidget
                   +----GtkContainer
                         +----GtkBox
                               +----GtkVBox
                                     +----GtkColorSelection
                                     +----GtkFileChooserWidget
                                     +----GtkFontSelection
                                     +----GtkGammaCurve
    on peut voir que vbox est dérivée de GtkBox et donc par la même occasion, dérivé de GtkContainer donc toutes ces fonctions peuvent être utilisées !

    Par ailleur, il est préférable et voir même recommandable d'initialiser directement ta liste de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ...
    GList *liste = NULL;
    ce qui te permet d'1, d'initialiser ta liste puis de 2, de pouvoir tester le retour de la fonction avant d'aller plus loin !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 92
    Par défaut


    Mais alors pourquoi c'est mon appel à cette fonction qui plante mon programme?

    L'erreur vient de mon cast d'où mes interrogations sur la vbox container ou non

    Désolé de t'embêter comme ça et merci pour tout

  7. #7
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Je n'est jamais utilisé le widget GtkImage ! Tu pourrais me donner ton compilable réduit au minimum ?
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 92
    Par défaut
    ça va être dur ^^ y'a un peu beaucoup de chose... par contre je t'en écris un pitit juste pour ce problème là, j'arrive dans 2 sec merci!

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 92
    Par défaut
    Alors ça c'est trop bizarre... Sur mon petit programme d'exemple, ça marche lol... si tu le veux je te l'envoie

    J'ai plus qu'à trouver la différence entre les deux ^^

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 92
    Par défaut
    Résolu!

    Ecoute je tiens vraiment à te remercier, sans toi je n'aurais ni la fonction get_child() ni enlevé ce bug... finallement tout bête que j'ai trouvé en comparant les deux!

    Si tu veux mon exemple pour voir les GtkImage je te le file les GtkImage je gère mieux que les vbox loool

  11. #11
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Oui je le veut bien merci
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  12. #12
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Tu peut tout de même poster le code ici, ca servira sans doute à d'autre personnes !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 92
    Par défaut
    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
     
    #include <gtk/gtk.h>
     
     
    int main (int argc, char *argv[])
    {
      GtkWidget *window1;
      GtkWidget *vbox1;
      int cpt;
      GtkWidget *img;
     
      gtk_set_locale ();
      gtk_init (&argc, &argv);
     
      window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
      gtk_window_set_title (GTK_WINDOW (window1), "window1");
     
      vbox1 = gtk_vbox_new (FALSE, 0);
      gtk_widget_show (vbox1);
      gtk_container_add (GTK_CONTAINER (window1), vbox1);
     
     
      for(cpt = 0; cpt < 3; cpt++)
      {
          img = gtk_image_new_from_file((const gchar *)"test1.png"); //On crée le widget
          gtk_widget_show(img); //On affiche le widget
          gtk_box_pack_start(GTK_BOX(vbox1), img, TRUE, TRUE, 0);  //On l'ajoute au containeur
      }
     
      gpointer ptr;
      GList *liste = NULL;
      liste = gtk_container_get_children(GTK_CONTAINER(GTK_BOX(vbox1)));
      ptr = g_list_nth_data(liste, 0);
     
      //---- ICI LA FONCTION ----//
      gtk_image_set_from_file(GTK_IMAGE(ptr), "test2.png");
     
      gtk_widget_show(window1);
      g_signal_connect ((gpointer) window1, "destroy", G_CALLBACK(gtk_main_quit),
                        NULL);
     
      gtk_main ();
     
      return 0;
    }

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

Discussions similaires

  1. Pop-up d'une dialog box a partir d'un bouton
    Par bobbyjack dans le forum MFC
    Réponses: 21
    Dernier message: 13/09/2005, 15h32
  2. Trouver le composant sous la souris...
    Par BestofMac dans le forum Composants VCL
    Réponses: 2
    Dernier message: 17/07/2002, 02h46
  3. Réponses: 2
    Dernier message: 21/05/2002, 10h25
  4. Réponses: 4
    Dernier message: 27/03/2002, 11h03

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