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 :

[GtkListStore] Récupération des données


Sujet :

GTK+ avec C & C++

  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 32
    Par défaut [GtkListStore] Récupération des données
    Coucou me revoilou :p

    euh alors un petit problème, avant de l'exposer, je tient a souligner que j'ai vu plusieurs post la dessus, résolu, mais je n'ais pas compris

    donc voila alors j'ai ma liste et ce qui doit la contenir une fois récupérée (une structure)
    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
     
    typedef struct    {
      char code[10];
      char nom[40];
      char prenom[40];
      char solde[2];
    } ELEMENT;
    typedef struct
    {
      ELEMENT element[1000];  //  <====== ce qui contiendra la liste
      GtkWidget * ZoneNomM;
      GtkWidget * ZonePrenomM;
      GtkWidget * ZoneNoBadgeM;
      GtkWidget * ZoneSoldeM;
      GtkWidget * ZoneListeM;
      GtkWidget * ZoneNbRepM;
      GtkWidget * ZoneNbReloadM;
    } TABLEAU;
    Ca c'est les bases. Ensuite, j'utilise un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    p_model = gtk_list_store_new(4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
    tableau[0].ZoneListeM = gtk_tree_view_new_with_model(GTK_TREE_MODEL(p_model));

    je le "scroll" pour avoir la liste avec une barre de défilement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    GtkWidget *scroll = gtk_scrolled_window_new(NULL,NULL);
        gtk_scrolled_window_add_with_viewport(scroll,tableau[0].ZoneListeM);
    puis je transmet mon tableau via le callback
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g_signal_connect(G_OBJECT(tableau[0].ZoneListeM), "row-activated", G_CALLBACK( AffichageResteM ), tableau);
    (dailleur en parlant de ca "row-activated" correspond a un double clic sur une ligne, quel est l'événement pour un simple clic?)

    et donc ensuite, j'aimerais récupérer la ligne sélectionnée par l'utilisateur.

    petite image pour montrer :

    http://img165.imageshack.us/my.php?image=unecc3.jpg

    (cliquer sur l'image pour avoir une meilleur qualité)

    donc en gros, j'aimerais que dans ma fonction "AffichageResteM"
    je récupére les infos de la ligne sélectionnés, c'est a dire, le nom, prénom,n° de badge et le solde

    j'ai regardé dans la doc, mais bon j'arrive pas a trouver ce que je voudrais.

    Merci d'avance.

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par DarkIndra
    (dailleur en parlant de ca "row-activated" correspond a un double clic sur une ligne, quel est l'événement pour un simple clic?)
    cursor-changed

    Pour le reste, c'est expliqué ici : http://nicolasj.developpez.com/gtk/c...e_17#LXVII-C-3

    Voici la fonction en entier (ce n'est pas la même, je l'ai faite hier soir donc je suis sûr quelle fonctionne) :
    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
    static void row_activated (GtkTreeView *p_tree_view, GtkTreePath *arg1,
                               GtkTreeViewColumn *arg2, gpointer user_data)
    {
      gchar *str = NULL;
      GtkTreeIter iter;
      GtkTreeModel *p_tree_model = NULL;
     
      p_tree_model = gtk_tree_view_get_model (p_tree_view);
      gtk_tree_model_get_iter (p_tree_model, &iter, arg1);
      gtk_tree_model_get (p_tree_model, &iter, 0, &str, -1);
      g_print ("%s\n", str);
     
      (void)arg2;
      (void)user_data;
    }
    Dans mon cas, je n'ai qu'une colonne contenant du texte

  3. #3
    Membre averti
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 32
    Par défaut
    Citation Envoyé par gege2061
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    static void row_activated (GtkTreeView *p_tree_view, GtkTreePath *arg1,
                               GtkTreeViewColumn *arg2, gpointer user_data)
    {
     
      gtk_tree_model_get_iter (p_tree_model, &iter, arg1);
     
    }
    le GtkTreePath euh j'en ai pas créé moi ca, comment ca marche?

    je vais tester la fonction au cas ou, mais bon je sais pas trop comment ca fonctionne

    et je vais tester l'événement

    EDIT: je viens de le tester et il fait planter mon programme

    RE EDIT: j'ai rien dit c'est louche , je m'explique, quand je fait en row-changed, donc en double clic ca fonctionne, et quand je fais en simple clic, ca plante, il s'agit de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%s\n", tableau[0].element[0].nom);

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par DarkIndra
    le GtkTreePath euh j'en ai pas créé moi ca, comment ca marche?
    Tu le reçois automatiquement en argument. C'est en faite une représentation de l'emplacement d'une ligne (ici celle sélectionnée). Tu peux facilement la convertir sous forme de chaine de caractères gtk_tree_path_to_string .

    Citation Envoyé par DarkIndra
    RE EDIT: j'ai rien dit c'est louche , je m'explique, quand je fait en row-changed, donc en double clic ca fonctionne, et quand je fais en simple clic, ca plante, il s'agit de cette ligne :
    La signature de la fonction callback n'est pas la même

  5. #5
    Membre averti
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 32
    Par défaut
    rolalala je pige plus rien
    la fonction que tu m'as linké est inutilisable en faite? elle est basée sur row-changed, alors qu'il me faut cursor-changed

    il rentre bien dans ma fonction a chaque clic avec cursor-changed (j'ai mi un printf pour vérifier) mais, il me reste qu'a récupérer les données, et c'est surtout ca le gros soucis, car je m'en sert aussi dans 3 autres parties du programme

  6. #6
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par DarkIndra
    rolalala je pige plus rien
    la fonction que tu m'as linké est inutilisable en faite? elle est basée sur row-changed, alors qu'il me faut cursor-changed

    il rentre bien dans ma fonction a chaque clic avec cursor-changed (j'ai mi un printf pour vérifier) mais, il me reste qu'a récupérer les données, et c'est surtout ca le gros soucis, car je m'en sert aussi dans 3 autres parties du programme
    Dans ce cas, la fonction callback ne reçoit pas les informations sur lignes sélectionnée (GtkTreePath), il faut donc commencer par les récupérer à la main : gtk_tree_view_get_selection puis gtk_tree_selection_get_selected_rows pour récupérer la liste des GtkTreePath (parce que tu peux activer la multi-sélection).

  7. #7
    Membre averti
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 32
    Par défaut
    si je comprend bien, je dois faire un gtk_tree_view_get_selection sur mon GtkTreeView pour obtenir un GtkTreeSelection

    ce dernier je le passe en argument de gtk_tree_selection_get_selected_rows et mon TreeModel également pour récuperer une GList mais mon TreeModel, il vient de ma fonction principale, je ne peux donc pas le récupérer dans ma "sous-fonction" non? et ma Glist (pfiou quelle misère à comprendre ) c'est une structure comme ca non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    typedef struct {
      gpointer data;
      GList *next;
      GList *prev;
    } GList;
    mais à partir de la, je n'ais toujours pas récupérer mes infos? il faut que je me serve du gpointer data de la Glist non? mais comment?
    (désolé si je pose beaucoup de question, mais comme je l'ais dit, GTK je débute, et jai essayer de comprendre seul, mais c'est un peu compliqué, surtout en un délai si court)

    ps: je ne pourrais tester que demain, j'ai fini ma journée, je suis au 35h
    bonne soirée à tous

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

Discussions similaires

  1. Récupération des données d'un formulaire
    Par placenargac dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 04/02/2006, 15h10
  2. récupération des données via une liste déroulante
    Par rahan_dave dans le forum Access
    Réponses: 1
    Dernier message: 13/10/2005, 12h27
  3. [HTML][FORMULAIRE] Probleme dans la récupération des données
    Par baddounet dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 15/08/2005, 18h51
  4. Réponses: 2
    Dernier message: 20/02/2004, 08h47
  5. Réponses: 13
    Dernier message: 20/03/2003, 08h11

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