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 :

gtk_container_remove () reutiliser un widget.


Sujet :

GTK+ avec C & C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 27
    Par défaut gtk_container_remove () reutiliser un widget.
    bonjour ,

    j'aimerais savoir comment on peux reutiliser un widget apres avoir utilise la fonction gtk_container_remove ().

    dans la doc il est ecrit :

    "If you want to use widget again, you need to add a reference to it while it's not inside a container, using g_object_ref()."
    cf:
    http://developer.gnome.org/doc/API/2...ntainer-remove

    mais je ne trouve pas d'exemple de code utilisant g_object_ref() et je ne sais pas comment l'utiliser pour pouvoir reutilser mon widget.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Quand tu fais gtk_container_remove et que tu n'utilises ton widget nulle part ailleurs, gtk+ se rend compte qu'il n'est plus utilisé et le détruit. Il se rend compte qu'il n'est plus utilisé grâce à un compteur de référence, ie chaque fois que quelqu'un souhaite utiliser le widget, il incrémente le compteur de référence, puis le décrémente dés que le widget ne lui est plus utile. Quand le compteur de référence tombe à 0, le widget est détruit vu que ca veut dire que plus personne n'en a besoin.
    Dans ton cas, quand tu fais un gtk_container_add, le container va incrémenter le compteur de référence de ton widget, et en faisant le gtk_container_remove, le compteur de référence va être décrémenté, et si le container était le seul utilisateur du widget, ça veut dire que le compteur va atteindre 0 et le widget va se détruire.
    g_object_ref te permet de prendre une référence sur le widget pour dire que tu en as besoin, ce qui entre autres empêche la destruction du widget. Pour l'utiliser, rien de plus simple, par exemple tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    g_object_ref (G_OBJECT (widget));
    gtk_container_remove (container, GTK_WIDGET (widget));
    /* Faire plein de trucs avec widget */
    g_object_unref (G_OBJECT (widget));
    /* Ne plus utiliser widget à partir de cet endroit */

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 27
    Par défaut
    merci pour la reponse et pour cette explication precise.
    je vais tester ca tout de suite encore merci .

    edit : super ca marche , merci

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

Discussions similaires

  1. comment modifier les widgets dans une fenètre??
    Par afrikha dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 14/10/2005, 14h48
  2. Réponses: 4
    Dernier message: 02/09/2005, 10h24
  3. Réponses: 1
    Dernier message: 22/06/2005, 15h55
  4. [Tkinter] widget Text
    Par t_om84 dans le forum Tkinter
    Réponses: 8
    Dernier message: 17/06/2005, 09h30
  5. [SWT]Eclipse Java : swt.widgets.Table
    Par watson dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 01/10/2003, 09h07

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