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 GtkTreeView


Sujet :

GTK+ avec C & C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Par défaut problème avec GtkTreeView
    Bonjour.

    Je veux afficher une liste d'utilisateurs contenue dans un fichier binaire avec l'outil GtkTreeView et pour cela j'ai utilisé le code ci-dessous mais rien ne se passe aidez moi.

    Merci d'avance.

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    enum {
        TEXT_COLUMN,
        INT_COLUMN,
        INT_COLUMN2,
        INT_COLUMN3,
        TEXT_COLUMN2,
        N_COLUMN
    };
     
    int main(int argc,char argv[]){
        GtkWidget *box;
        GtkWidget *pWindow;
        GtkWidget *pListView;
        GtkWidget *pScrollbar;
        GtkListStore *pListStore;
        GtkTreeViewColumn *pColumn;
        GtkCellRenderer *pCellRenderer;
    gtk_init(&argc,&argv);
        /* Creation de la fenetre principale */
        pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
        gtk_window_set_title(GTK_WINDOW(pWindow), "Gestion  des utilisateurs");
        g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
        box=gtk_vbox_new(TRUE,1);
     
        /* Creation du modele */
        pListStore = gtk_list_store_new(N_COLUMN,G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING,G_TYPE_INT,G_TYPE_INT);
     
     
        /* Insertion des elements */
        FILE *f=fopen("utilisateur.dat","rb");
        struct personne    *t=(struct    personne*)malloc(sizeof(struct   personne));
        while(fread(t,sizeof(struct personne),1,f),!feof(f)){
     
                        GtkTreeIter pIter;
                         /* Creation de la nouvelle ligne */
                        gtk_list_store_append(pListStore, &pIter);
                        /* Mise a jour des donnees */
                        gtk_list_store_set(pListStore, &pIter,INT_COLUMN,t->code,TEXT_COLUMN, t->pseudo,TEXT_COLUMN2, t->mp,INT_COLUMN2,t->etat,INT_COLUMN3,t->service,-1);
     
     
        }
        /*for(i = 0 ; i < 10 ; ++i)
        {
            GtkTreeIter pIter;
     
            sprintf(sTexte, "Ligne %d ", i);
     
     
            gtk_list_store_append(pListStore, &pIter);
     
     
            gtk_list_store_set(pListStore, &pIter,
                TEXT_COLUMN, sTexte,
                TOGGLE_COLUMN, TRUE,
                -1);
        }*/
        fclose(f);
        free(t);
     
        /* Creation de la vue */
        pListView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(pListStore));
     
    /* Creation de la premiere colonne */
        pCellRenderer = gtk_cell_renderer_text_new();
        pColumn = gtk_tree_view_column_new_with_attributes("num",
            pCellRenderer,
            "text", INT_COLUMN,
            NULL);
            /* Ajout de la colonne à la vue */
        gtk_tree_view_append_column(GTK_TREE_VIEW(pListView), pColumn);
        /* Creation de la premiere colonne */
        pCellRenderer = gtk_cell_renderer_text_new();
        pColumn = gtk_tree_view_column_new_with_attributes("pseudo",
            pCellRenderer,
            "text", TEXT_COLUMN,
            NULL);
     
        /* Ajout de la colonne à la vue */
        gtk_tree_view_append_column(GTK_TREE_VIEW(pListView), pColumn);
     
        /* Creation de la deuxieme colonne */
        pCellRenderer = gtk_cell_renderer_text_new();
        pColumn = gtk_tree_view_column_new_with_attributes("password",
            pCellRenderer,
            "text", TEXT_COLUMN2,
            NULL);
     
        /* Ajout de la colonne à la vue */
        gtk_tree_view_append_column(GTK_TREE_VIEW(pListView), pColumn);
     
        /* Creation de la premiere colonne */
        pCellRenderer = gtk_cell_renderer_text_new();
        pColumn = gtk_tree_view_column_new_with_attributes("etat",
            pCellRenderer,
            "text", INT_COLUMN2,
            NULL);
            /* Ajout de la colonne à la vue */
        gtk_tree_view_append_column(GTK_TREE_VIEW(pListView), pColumn);
     
    /* Creation de la premiere colonne */
        pCellRenderer = gtk_cell_renderer_text_new();
        pColumn = gtk_tree_view_column_new_with_attributes("num de service",
            pCellRenderer,
            "text", INT_COLUMN2,
            NULL);
            /* Ajout de la colonne à la vue */
        gtk_tree_view_append_column(GTK_TREE_VIEW(pListView), pColumn);
        /* Ajout de la vue a la fenetre */
        pScrollbar = gtk_scrolled_window_new(NULL, NULL);
        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(pScrollbar),
            GTK_POLICY_AUTOMATIC,
            GTK_POLICY_AUTOMATIC);
        gtk_container_add(GTK_CONTAINER(pScrollbar), pListView);
        gtk_box_pack_start(GTK_BOX(box),pScrollbar,FALSE,FALSE,0);
        gtk_container_add(GTK_CONTAINER(pWindow), box);
     
        gtk_widget_show_all(pWindow);
     
        gtk_main();
    return 0;
    }

  2. #2
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Si tu nous donnais un code qui compile, ce serait plus simple. Là on a même pas la fonction main...

  3. #3
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    De plus, l'application crashe si on a pas le fichier utilisateur.dat...

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Par défaut
    voila le fichier utilisateur.dat
    utilisateur.dat.tar.gz

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Peux-tu nous montrer aussi la structure personne?

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    En cherchant je suppose que la structure personne est de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct
    {
      int code;
      char pseudo[20];
      char mp[20];
      int etat;
      int service;
    } personne;

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Bon je suppose que c'est ce genre de chose que tu veux obtenir :
    Images attachées Images attachées  

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Ton problème majeur vient de la déclaration de l' enum. Il faut qu'il soit dans l'ordre d'insertion du GtkListStore. Sinon tu te retrouves à essayer d'insérer un char* dans int!

    Ensuite, et là c'est mineur, quelques points de programmation. Il n'est pas nécessaire de faire une allocation dynamique lorsque ta variable reste locale. Déclarer une variable dans une boucle while...Beurk, quelle horreur (GtkTreeIter pIter.

    Au final voila ton code modifié et épuré :
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    #include <gtk/gtk.h>
     
     
    enum {
      INT_COLUMN,
      TEXT_COLUMN,
      TEXT_COLUMN2,
      INT_COLUMN2,
      INT_COLUMN3,
      N_COLUMN
    };
     
    typedef struct
    {
      gint code;
      gchar pseudo[20];
      gchar mp[20];
      gint etat;
      gint service;
    } personne;
     
    int
    main(int argc,char *argv[])
    {
      GtkWidget *box;
      GtkWidget *pWindow;
      GtkWidget *pListView;
      GtkWidget *pScrollbar;
      GtkListStore *pListStore;
      GtkTreeViewColumn *pColumn;
      GtkCellRenderer *pCellRenderer;
      GtkTreeIter pIter;
     
      gtk_init(&argc,&argv);
     
      /* Creation de la fenetre principale */
      pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
      gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
      gtk_window_set_title(GTK_WINDOW(pWindow), "Gestion  des utilisateurs");
      g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
      box=gtk_box_new(GTK_ORIENTATION_VERTICAL,1);
     
      /* Creation du modele */
      pListStore = gtk_list_store_new(N_COLUMN,G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING,G_TYPE_INT,G_TYPE_INT);
     
     
      /* Insertion des elements */
      FILE *f=fopen("utilisateur.dat","rb");
      personne t;
      while(fread(&t,sizeof(personne),1,f), !feof(f))
        {
          /* Creation de la nouvelle ligne */
          gtk_list_store_append(pListStore, &pIter);
          /* Mise a jour des donnees */
          gtk_list_store_set(pListStore, &pIter,
          			 INT_COLUMN, t.code,
          			 TEXT_COLUMN, &t.pseudo,
          			 TEXT_COLUMN2, &t.mp,
          			 INT_COLUMN2, t.etat,
          			 INT_COLUMN3,t.service,
          			 -1);
        }
      fclose(f);
     
      /* Creation de la vue */
      pListView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(pListStore));
     
      /* Creation de la premiere colonne */
      pCellRenderer = gtk_cell_renderer_text_new();
      pColumn = gtk_tree_view_column_new_with_attributes("num",
      						     pCellRenderer,
      						     "text", INT_COLUMN,
      						     NULL);
      /* Ajout de la colonne à la vue */
      gtk_tree_view_append_column(GTK_TREE_VIEW(pListView), pColumn);
      /* Creation de la premiere colonne */
      pCellRenderer = gtk_cell_renderer_text_new();
      pColumn = gtk_tree_view_column_new_with_attributes("pseudo",
      						     pCellRenderer,
      						     "text", TEXT_COLUMN,
      						     NULL);
     
      /* Ajout de la colonne à la vue */
      gtk_tree_view_append_column(GTK_TREE_VIEW(pListView), pColumn);
     
      /* Creation de la deuxieme colonne */
      pCellRenderer = gtk_cell_renderer_text_new();
      pColumn = gtk_tree_view_column_new_with_attributes("password",
      						     pCellRenderer,
      						     "text", TEXT_COLUMN2,
      						     NULL);
     
      /* Ajout de la colonne à la vue */
      gtk_tree_view_append_column(GTK_TREE_VIEW(pListView), pColumn);
     
      /* Creation de la premiere colonne */
      pCellRenderer = gtk_cell_renderer_text_new();
      pColumn = gtk_tree_view_column_new_with_attributes("etat",
      						     pCellRenderer,
      						     "text", INT_COLUMN2,
      						     NULL);
      /* Ajout de la colonne à la vue */
      gtk_tree_view_append_column(GTK_TREE_VIEW(pListView), pColumn);
     
      /* Creation de la premiere colonne */
      pCellRenderer = gtk_cell_renderer_text_new();
      pColumn = gtk_tree_view_column_new_with_attributes("num de service",
      						     pCellRenderer,
      						     "text", INT_COLUMN2,
      						     NULL);
      /* Ajout de la colonne à la vue */
      gtk_tree_view_append_column(GTK_TREE_VIEW(pListView), pColumn);
      /* Ajout de la vue a la fenetre */
      pScrollbar = gtk_scrolled_window_new(NULL, NULL);
      gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(pScrollbar),
    				 GTK_POLICY_AUTOMATIC,
    				 GTK_POLICY_AUTOMATIC);
      gtk_container_add(GTK_CONTAINER(pScrollbar), pListView);
      gtk_box_pack_start(GTK_BOX(box),pScrollbar, TRUE,TRUE,0);
      gtk_container_add(GTK_CONTAINER(pWindow), box);
     
      gtk_widget_show_all(pWindow);
     
      gtk_main();
      return 0;
    }

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Par défaut
    probleme resolu merci infiniment

  10. #10
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Déclarer une variable dans une boucle while...Beurk, quelle horreur (GtkTreeIter pIter.
    Pas forcément. Il me semble que cela dépend de comment le compilateur l'optimise. Une variable qui sera déclarée dans une boucle a plus de chances de se voir affecter un registre du processeur. Et dans ce cas les calculs vont beaucoup plus vite...

    En fait pour être sûr il faudrait essayer les deux et comparer la sortie assembleur...

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par liberforce Voir le message
    Pas forcément. Il me semble que cela dépend de comment le compilateur l'optimise. Une variable qui sera déclarée dans une boucle a plus de change de se voir affecter un registre du processeur. Et dans ce cas les calculs vont beaucoup plus vite...

    En fait pour être sûr il faudrait essayer les deux et voir comparer la sortie assembleur...
    Je ne savais pas. on en apprend tous les jours

    Maintenant si on reste sur un principe de programmation ca ne me semble pas très propre comme écriture. Il faut vraiment être sûr du comportement du compilateur pour ce permettre ce genre d'écriture. Enfin je crois...

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

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