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 avec gtk_tree_model_foreach


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 6
    Par défaut Problème avec gtk_tree_model_foreach
    Bonjour a tous!
    Je cherche à programmer une application C avec GTK+ mais j'ai un soucis au niveau d'un GTK_LIST_STORE.
    J'ai donc un GTK_LIST_STORE que j'ai appellé pListStore avec deux colonnes : une colonne contenant une chaine de caractères et une autre contenant un entier.
    Ce que j'aimerais faire c'est qu'au moment où j'appuie sur entrée, il y ait une recherche au niveau de la colonne des entiers et si il y a un entier égal à 3 il supprime la cellule du GTK_LIST_STORE où se situe le 3.

    Voila ce que j'ai essayé de faire :
    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
     
    gboolean foreach_func(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data)
    {
       	gchar * p_nom;
    	gint * nb;
     
     
    	gtk_tree_model_get (model, iter,0, & p_nom,1, & nb,-1);
     
    	if(*nb == 3)
    	{
    		gtk_list_store_remove (GTK_LIST_STORE(model), iter);
    	}
     
        return FALSE; 
    }
    Et dans la fonction callback pour le signal "activate" j'ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gtk_tree_model_foreach(GTK_TREE_MODEL(pListStore), foreach_func, NULL);
    A l'exécution, j'ai une erreur de segmentation sur la fonction foreach_func.

    Merci d'avance pour vos réponses.

  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
    Ca n'est pas dit explicitement dans la doc, mais je ne serais pas surpris que les modifications du modèle (en particulier les suppressions) soient interdites lorsque tu fait un _foreach dessus. Ca aide si tu enleves le gtk_list_store_remove de ton foreach_func ?

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 6
    Par défaut
    Effectivement, si j'enlève gtk_list_store_remove ça ne me mets pas d'erreur. Mais si je met à la place un simple g_printf, ça plante aussi.
    N'y aurait-il pas un autre moyen que celui-ci pour effectuer ce que je veux?

  4. #4
    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
    Ton int *nb; me semble louche, tu ne voulais pas plutôt faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    gint nb;
     
    gtk_tree_model_get (model, iter,0, & p_nom,1, & nb,-1);
     
    if(nb == 3) {
        ....
    }

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 6
    Par défaut
    OUF! Merci beaucoup! c'était bien un problème d' initialisation. Ca marche maintenant, on peut modifier le model avec un foreach.
    Merci encore!

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 6
    Par défaut
    Bonjour!
    J'ai été un peu vite en disant que mon problème était résolu bien qu'il le soit en grande partie.
    Avec la correction du code ci-dessus, j'arrive bien à modifier le GTK_LIST_STORE mais j'ai tout de même une erreur. C'est un problème avec l'itérateur je pense.
    Voila ce que ça me donne au moment de la suppression de la cellule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Gtk-CRITICAL **: gtk_list_store_iter_next: assertion `GTK_LIST_STORE (tree_model)->stamp == iter->stamp' failed
    J'ai lu autre part qu'il faut récupérer l'état de l'itérateur mais je n'ai pas trop bien saisie le concept.

    j'ai tout de même tenté ceci :

    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
     
    gboolean foreach_func(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data)
    {
       	gchar * p_nom;
    	gint  nb;
     
     
    	if (gtk_tree_model_get_iter (model, iter, path))
            {
    	           gtk_tree_model_get (model, iter,0, & p_nom,1, & nb,-1);
     
    	            if(nb == 3)
    	             {
    		                gtk_list_store_remove (GTK_LIST_STORE(model), iter);
    	             }
             }
     
        return FALSE; 
    }
    Cela me renvoie quand même l'erreur d'itérateur.

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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