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 :

comment recuperer le signal emis par une checkbox dans une Listview


Sujet :

GTK+ avec C & C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    7
    D�tails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Par d�faut comment recuperer le signal emis par une checkbox dans une Listview
    salut ! j'utilise gtk+ depuis pas longtemps et la le bloque !
    je voudrai savoir comment rendre une checkbox clickable dans une listview , et aussi comment recuperer le signal associ� dans le but de suprimer la ou les lignes selectionn�es !


    voila un code exemple :

    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
    #include <stdlib.h>
    #include <stdio.h>
    #include <gtk/gtk.h>
     
    enum {
        TEXT_COLUMN,
        TOGGLE_COLUMN,
        N_COLUMN
    };
     
    int main(int argc, char **argv)
    {
        GtkWidget *pWindow;
        GtkWidget *pListView;
        GtkWidget *pScrollbar;
        GtkListStore *pListStore;
        GtkTreeViewColumn *pColumn;
        GtkCellRenderer *pCellRenderer;
        gchar *sTexte;
        gint i;
     
        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), "GtkTreeView et GtkListStore");
        g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
     
        /* Creation du modele */
        pListStore = gtk_list_store_new(N_COLUMN, G_TYPE_STRING, G_TYPE_BOOLEAN);
     
        sTexte = g_malloc(12);
     
        /* Insertion des elements */
        for(i = 0 ; i < 10 ; ++i)
        {
            GtkTreeIter pIter;
     
            sprintf(sTexte, "Ligne %d\0", i);
     
            /* Creation de la nouvelle ligne */
            gtk_list_store_append(pListStore, &pIter);
     
            /* Mise a jour des donnees */
            gtk_list_store_set(pListStore, &pIter,
                TEXT_COLUMN, sTexte,
                TOGGLE_COLUMN, TRUE,
                -1);
        }
     
        g_free(sTexte);
     
        /* 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("Titre",
            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_toggle_new();
        pColumn = gtk_tree_view_column_new_with_attributes("CheckBox",
            pCellRenderer,
            "active", TOGGLE_COLUMN,
            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_container_add(GTK_CONTAINER(pWindow), pScrollbar);
     
        gtk_widget_show_all(pWindow);
     
        gtk_main();
     
        return EXIT_SUCCESS;
    }
    un coup de pouce serait tres aimable de votre part ! merci

    pourai je savoir juste pourquoi la checkbox ne reagi pas au click ! pourtant je met la propriete "activatable" a true !!

    g_object_set(G_OBJECT(pCellRenderer), "activatable",TRUE,NULL);

    est ce que ca peut venir de ma version gtk+ 2.10 qui n'est pas a jour ?

  2. #2
    Expert confirm�
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    F�vrier 2008
    Messages
    2 315
    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 315
    Billets dans le blog
    5
    Par d�faut
    Salut.

    Je me suis coll� � ton probl�me.

    J'ai une solution qui n'apporte qu'une r�ponse partielle. Il faut connecter un CALLBACK aux cellrenderer avec le signal "toggled". Dans ce callback tu testes l'�tat du bouton. J'ai modifi� ton code en fonction est ca fonctionne.
    Maintenant le probl�me vient du fait que les 10 boutons ne sont en fait qu'un seul. Donc lorsque tu changes l'�tat de l'un, ca change l'�tat de tous! Je pense qu'il faudrait cr�er autant de boutons que de lignes de mani�re individuelle pour �viter ce d�sagr�ment.
    Je te fourni le code modifi� :
    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
    #include <stdlib.h>
    #include <stdio.h>
    #include <gtk/gtk.h>
     
    enum {
        TEXT_COLUMN,
        TOGGLE_COLUMN,
        N_COLUMN
    };
     
    void toggled_func(GtkCellRendererToggle *cell_renderer, gchar *path, gpointer user_data)
    {
    	if (gtk_cell_renderer_toggle_get_active (cell_renderer))
    	{
    		printf("CellRendererToggle is actually active. This state gonna change.\n");
    		gtk_cell_renderer_toggle_set_active (cell_renderer, FALSE);
    	}
    	else
    	{
    		printf("CellRendererToggle is actually inactive. This state gonna change.\n");
    		gtk_cell_renderer_toggle_set_active (cell_renderer, TRUE);
    	}
    }
     
    int main(int argc, char **argv)
    {
        GtkWidget *pWindow;
        GtkWidget *pListView;
        GtkWidget *pScrollbar;
        GtkListStore *pListStore;
        GtkTreeViewColumn *pColumn;
        GtkCellRenderer *pCellRenderer;
        gchar *sTexte;
        gint i;
     
        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), "GtkTreeView et GtkListStore");
        g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
     
        /* Creation du modele */
        pListStore = gtk_list_store_new(N_COLUMN, G_TYPE_STRING, G_TYPE_BOOLEAN);
     
        sTexte = g_malloc(12);
     
        /* Insertion des elements */
        for(i = 0 ; i < 10 ; ++i)
        {
            GtkTreeIter pIter;
     
            sprintf(sTexte, "Ligne %d\0", i);
     
            /* Creation de la nouvelle ligne */
            gtk_list_store_append(pListStore, &pIter);
     
            /* Mise a jour des donnees */
            gtk_list_store_set(pListStore, &pIter,
                TEXT_COLUMN, sTexte,
                TOGGLE_COLUMN, TRUE,
                -1);
        }
     
        g_free(sTexte);
     
        /* 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("Titre",
            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_toggle_new();
    		g_signal_connect(G_OBJECT(pCellRenderer), "toggled", (GCallback)toggled_func, NULL);
     
        pColumn = gtk_tree_view_column_new_with_attributes("CheckBox",
            pCellRenderer, 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_container_add(GTK_CONTAINER(pWindow), pScrollbar);
     
        gtk_widget_show_all(pWindow);
     
        gtk_main();
     
        return EXIT_SUCCESS;
    }

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    7
    D�tails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Par d�faut
    merci gerald3d maintenant c'est d�ja pas mal meme si ca a un comportement bizar qui vient effectivement du fait que les 10 boutons sont consid�r�s comme un seul bouton . je vais voir comment r�soudre ce probleme c'est a dire sans devoir cr�er chaque bouton individuellement car dans le cas ou j'ignore le nombre de lignes ca risque de poser probleme . en tout cas merci encore pour le coup de mains

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    7
    D�tails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Par d�faut enfin
    euhh gerald3d apres avoir bien analys� ta solution jai constat� que tu agissais sur le rendu de la colonne qui contient les checkboxs et non sur la checkbox consern�e ce qui explique pourquoi le changement les affectait toutes. ce qui m'a permis de rem�dier a ca plus facilement !
    voila la solution a ce probleme au cas ou quelqu'un en aurait besoin un jour .

    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
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <gtk/gtk.h>
     
     
    enum {
        TEXT_COLUMN,
        TOGGLE_COLUMN,
        N_COLUMN
    };
     
    void toggled_func(GtkCellRendererToggle *cell_renderer, gchar *path, gpointer user_data)
    {
     
        GtkTreeIter iter;
        GtkTreePath *ppath;
        gboolean boolean;
     
     
    // convertir la chaine path en GtkTreePath 
     
         ppath = gtk_tree_path_new_from_string (path);
     
    // convertir la valeure recuperée en GtkTreeIter  
         gtk_tree_model_get_iter (GTK_TREE_MODEL (user_data),
                               &iter,
                               ppath);
    //  utiliser la variable GtkTreeIter pour acceder la valeure booleaine                           
         gtk_tree_model_get (GTK_TREE_MODEL (user_data),
                               &iter,
                               TOGGLE_COLUMN,&boolean,
                               -1);
    // changer cette valeure booleaine (! boolean )                          
         gtk_list_store_set (user_data, &iter,
                          TOGGLE_COLUMN, !boolean,
                          -1);
     
     
    }
     
    int main(int argc, char **argv)
    {
        GtkWidget *pWindow;
        GtkWidget *pListView;
        GtkWidget *pScrollbar;
        GtkListStore *pListStore;
        GtkTreeViewColumn *pColumn;
        GtkCellRenderer *pCellRenderer;
        gchar *sTexte;
        gint i;
     
        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), "GtkTreeView et GtkListStore");
        g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
     
        /* Creation du modele */
        pListStore = gtk_list_store_new(N_COLUMN, G_TYPE_STRING, G_TYPE_BOOLEAN);
     
        sTexte = g_malloc(12);
     
        /* Insertion des elements */
        for(i = 0 ; i < 10 ; ++i)
        {
            GtkTreeIter pIter;
     
            sprintf(sTexte, "Ligne %d\0", i);
     
            /* Creation de la nouvelle ligne */
            gtk_list_store_append(pListStore, &pIter);
     
            /* Mise a jour des donnees */
            gtk_list_store_set(pListStore, &pIter,
                TEXT_COLUMN, sTexte,
                 TOGGLE_COLUMN,FALSE,
                -1);
        }
     
        g_free(sTexte);
     
        /* 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("Titre",
            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_toggle_new();
     
     
        pColumn = gtk_tree_view_column_new_with_attributes("CheckBox",
            pCellRenderer,
            "active", TOGGLE_COLUMN,
     
             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_container_add(GTK_CONTAINER(pWindow), pScrollbar);
     
        gtk_widget_show_all(pWindow);
        g_signal_connect(G_OBJECT(pCellRenderer), "toggled", (GCallback)toggled_func, pListStore);
        gtk_main();
     
        return EXIT_SUCCESS;
    }

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 3
    Dernier message: 25/03/2011, 18h29
  2. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est coch�e
    Par JessieCoutas dans le forum Macros et VBA Excel
    R�ponses: 3
    Dernier message: 18/08/2009, 13h35
  3. [POO] dans une classe, appeler une fonction dans une m�thode
    Par arnaudperfect dans le forum Langage
    R�ponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    R�ponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    R�ponses: 8
    Dernier message: 21/06/2007, 13h48

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