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 :

Connaitre le nombre de ligne d'une GtkListStore


Sujet :

GTK+ avec C & C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Connaitre le nombre de ligne d'une GtkListStore
    Bonjour à tous,

    J'ai un GtkTreeView dans mon programme et je voudrais afficher un message lorsque ce dernier est vide (aucune ligne), et lorsqu’il n'est pas vide indiquer le nombre de ligne.
    Pour cela, j'aurai besoin de connaitre le nombre de ligne dans la GtkListStore qui gère le GtkTreeview.

    Ma question est donc :
    - Il y a-t-il une fonction qui permette de connaitre directement le nombre de ligne dans une GtkListStore ?
    - Si cette fonction n'existe pas, comment puis-je parcourir la GtkListStore pour calculer le nombre de ligne avec une variable int qui s'incrémente à chaque parcoure d'une nouvelle ligne ?

    Merci de votre aide

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 293
    Points : 4 943
    Points
    4 943
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Une manière possible (je n'en vois pas d'autre mais je suis peut être passé à côté de quelque chose de simple) est de récupérer le GtkTreeModel du GtkTreeView avec la fonction GtkTreeModel *gtk_tree_view_get_model (GtkTreeView *tree_view);.

    A partir de là tu utilises la fonction void gtk_tree_model_foreach (GtkTreeModel *model, GtkTreeModelForeachFunc func, gpointer user_data); pour exécuter une fonction pour chaque node, qui correspondra ici à chaque ligne. Dans cette fonction tu pourras incrémenter un compteur qui correspondra au nombre de lignes de ton GtkListStore.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci de ta réponse. J'ai suivi ton idée et j'ai codé ça :

    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
    int longueur_list (gpointer user_data)
    {
        GtkTreeModel* g_tree_model;
        saisieCommande *commandeClient=user_data;
        int i=0;
     
        g_tree_model = gtk_tree_view_get_model(GTK_TREE_VIEW(commandeClient->pListView)); // On récupère le modèle du GtkTreeView
     
        gtk_tree_model_foreach (g_tree_model, increment, &i);
        printf("%d",i);
        return i;
    }
     
    void increment (GtkTreeModel *model, GtkTreePath *path,GtkTreeIter *iter,gpointer data)
    {
        data++;
    }
    Cependant ça ne fonctionne pas, la variable i reste à 0... Cela doit être dû au fait que je ne sache pas me servir de la fonction gtk_tree_model_foreach. Comment ça fonctionne ?

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 293
    Points : 4 943
    Points
    4 943
    Billets dans le blog
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void increment (GtkTreeModel *model, GtkTreePath *path,GtkTreeIter *iter,gpointer data)
    {
        data++;
    }
    Tu as un bon début. Mais data est un pointeur. Donc quand tu fais data++ tu incrémentes l'adresse de data et non son contenu. Il faut plutôt écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void increment (GtkTreeModel *model, GtkTreePath *path,GtkTreeIter *iter,gpointer data)
    {
        int *compteur = (int*) data; // Caste du pointeur
     
       *compteur++; // Accès au contenu grâce à "*" devant compteur.
    }

Discussions similaires

  1. Connaitre le nombre d'utilisateur sur une ligne
    Par Wil14 dans le forum Développement
    Réponses: 5
    Dernier message: 28/05/2009, 14h10
  2. connaitre le nombre de ligne d'une requete
    Par moimemessssssssss dans le forum VBA Access
    Réponses: 1
    Dernier message: 25/06/2008, 19h35
  3. Réponses: 2
    Dernier message: 13/06/2006, 15h46
  4. [C#][Débutant] Connaitre le nombre de lignes d une requete SQL
    Par Cazaux-Moutou-Philippe dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/04/2006, 00h48
  5. determination le nombre de ligne d'une table
    Par picoti2 dans le forum Bases de données
    Réponses: 2
    Dernier message: 18/03/2004, 09h25

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