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 :

Couleurs de colonnes dans un GtkTreeView


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 39
    Par défaut Couleurs de colonnes dans un GtkTreeView
    Bonjour.

    J'aimerais savoir comment on change la couleur de fond d'une colonne car chez moi il me sort une "Erreur de segmentation".

    Voici mon code :
    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
    	main_window_list =
    		gtk_tree_view_new_with_model(GTK_TREE_MODEL(bdtheque_tree));
    	main_window_cell_renderer = gtk_cell_renderer_text_new();
     
    	g_object_set(G_OBJECT(main_window_cell_renderer),"background-gdk",color_gray,NULL);
    /*cette ligne fait planter mon appli*/
     
    	main_window_view_column =
    		gtk_tree_view_column_new_with_attributes(
    				g_locale_to_utf8( "Contributeur", -1, NULL,
    					NULL, NULL),
    				main_window_cell_renderer, "text", 0,
    				NULL);
    	gtk_tree_view_append_column(GTK_TREE_VIEW(main_window_list),
    			main_window_view_column);
     
    /*c'est cette colonne que je veux mettre en gris*/
    	main_window_view_column =
    		gtk_tree_view_column_new_with_attributes(
    				g_locale_to_utf8( "Titre", -1, NULL,
    					NULL, NULL),
    				main_window_cell_renderer, "text", 1,//"background-gdk",
    				NULL);
    	gtk_tree_view_append_column(GTK_TREE_VIEW(main_window_list),
    			main_window_view_column);
    avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    GdkColor color_gray;
     
    color_gray.red = 40000;
    color_gray.green = 40000;
    color_gray.blue = 40000;
    Merci de vos réponses

    DBoJ

  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
    Bonjour,

    A mon avis, la propriété background-gdk attend un pointeur sur une structure du type GdkColor.

    Voici un exemple, sauf qu'ici la couleur est spécifiée lors de l'insertion d'une ligne ce qui permet d'alterner :
    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
    #include <gtk/gtk.h>
     
    #define NB_COLORS (sizeof (colors)/sizeof(colors[0]))
     
    static const GdkColor colors[] = {
      {0, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF},
      {0, 0xE0E0E0, 0xE0E0E0, 0xE0E0E0}
    };
     
    int main (int argc, char** argv)
    {
      GtkWidget* window = NULL;
     
      gtk_init (&argc, &argv);
      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
      g_signal_connect (G_OBJECT (window), "destroy", gtk_main_quit, NULL);
     
      {
        gint i;
        GtkWidget* tree_view;
        GtkListStore* list_store = NULL;
        GtkCellRenderer *renderer = NULL;
        GtkTreeViewColumn* column = NULL;
     
        list_store = gtk_list_store_new (2, GDK_TYPE_COLOR, G_TYPE_STRING);
        tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store));
        gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tree_view), FALSE);
        renderer = gtk_cell_renderer_text_new ();
        column = gtk_tree_view_column_new_with_attributes (NULL, renderer, "background-gdk", 0, "text", 1, NULL);
        gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
     
        for (i = 0; i < 3; i++)
        {
          char* text = NULL;
          GtkTreeIter iter;
     
          gtk_list_store_append (list_store, &iter);
          text = g_strdup_printf ("Line %d", i);
          gtk_list_store_set (list_store, &iter, 0, &colors[i%NB_COLORS], 1, text, -1);
          g_free (text), text = NULL;
        }
     
        gtk_container_add (GTK_CONTAINER (window), tree_view);
      }
      gtk_widget_show_all (window);
      gtk_main ();
      return 0;
    }

  3. #3
    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
    Chaque fois que tu appelles g_locale_to_utf8 sans récupérer la chaîne renvoyer pour pouvoir la libérer plus tard, tu leakes de la mémoire. Tes g_locale_to_utf8 sont inutiles avec des chaînes ascii pures

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 39
    Par défaut
    Citation Envoyé par teuf13
    Chaque fois que tu appelles g_locale_to_utf8 sans récupérer la chaîne renvoyer pour pouvoir la libérer plus tard, tu leakes de la mémoire
    C'est noté, je m'en occuperai après avoir résolu mon problème. Ce n'est pas un pb pour l'instant, masi ça risque de le devenir.
    Citation Envoyé par teuf13
    Tes g_locale_to_utf8 sont inutiles avec des chaînes ascii pures
    En fait, j'ai d'autres colonnes avec des accents, et les caractères accentués ne sont pas reconnus. Pour homogéniser le code, j'ai mis partout des g_locale_to_utf8 pour ne pas m'embêter si je veux changer les titres de colonnes.

    Citation Envoyé par gege2061
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        column = gtk_tree_view_column_new_with_attributes (NULL, renderer, "background-gdk", 0, "text", 1, NULL);
    Cette ligne là m'intéresse beaucoup, car elle semble faire ce que je veux. Par contre, chez moi les couleurs de colonnes ne changent pas et à l'exécution, j'ai un message :
    Citation Envoyé par mon PC
    GLib-GObject-WARNING **: unable to set property `background-gtk' of type `GdkColor' from value of type `gchararray'
    sachant que mon code a un peu évolué :
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    GdkColor color_gray;
     
    color_gray.red = 40000;
    color_gray.green = 40000;
    color_gray.blue = 40000;
    j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    GdkColor *my_color;
     
    my_color = (GdkColor*)calloc(2,sizeof(GdkColor));
     
    my_color[0].red = 65535;
    my_color[0].green = 65535;
    my_color[0].blue = 65535;
     
    my_color[1].red = 50000;
    my_color[1].green = 50000;
    my_color[1].blue = 50000;
    puis
    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
    	g_object_set(G_OBJECT(main_window_cell_renderer),"background-gdk",my_color,NULL);
     
    	main_window_view_column =
    		gtk_tree_view_column_new_with_attributes(
    				g_locale_to_utf8( "Contributeur", -1, NULL,
    					NULL, NULL),
    				main_window_cell_renderer, "background-gdk", 0, "text", 0,
    				NULL);
    	gtk_tree_view_append_column(GTK_TREE_VIEW(main_window_list),
    			main_window_view_column);
     
    /*c'est cette colonne que je veux mettre en gris*/
    	main_window_view_column =
    		gtk_tree_view_column_new_with_attributes(
    				g_locale_to_utf8( "Titre", -1, NULL,
    					NULL, NULL),
    				main_window_cell_renderer, "background-gdk", 1, "text", 1,
    				NULL);
    	gtk_tree_view_append_column(GTK_TREE_VIEW(main_window_list),
    			main_window_view_column);
    Au moins mon appli ne plante plus, c'était bien parce que "background-gtk" prend un pointeur sur couleur et pas une couleur directement. Par contre j'ai mon message de warning et rien ne se passe (les colonnes s'affichent en blanc).

    Merci.

    DBoJ

  5. #5
    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 DangerousBowlOfJelly Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	main_window_view_column =
    		gtk_tree_view_column_new_with_attributes(
    				g_locale_to_utf8( "Titre", -1, NULL,
    					NULL, NULL),
    				main_window_cell_renderer, "background-gdk", 1, "text", 1,
    				NULL);
    C'est peut être parce que tu as mis deux fois le même numéro de colonne. Une bonne pratique consiste à créer une énumération :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    enum
    {
      COL_COLOR
      COL_TEXT
      NB_COL
    };
    (avec les noms plus parlant), comme ça plus de soucis

    Par contre ça ne me semble pas utile de définir deux fois la couleur (une fois avec g_object_set et une autre fois lors de l'insertion d'une ligne).

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 39
    Par défaut
    Citation Envoyé par gege2061
    C'est peut être parce que tu as mis deux fois le même numéro de colonne. Une bonne pratique consiste à créer une énumération :
    Pourtant, j'ai repris la même structure que la ligne que j'ai citée dans ton programme, avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ..."background-gdk',(une valeur,"text",(une autre valeur),...
    Je pensais que la valeur mise après "background-gdk" correspondant à l'indice dans mon tableau de GdkColor. Me serais-je trompé ?

    Citation Envoyé par gege2061
    Par contre ça ne me semble pas utile de définir deux fois la couleur (une fois avec g_object_set et une autre fois lors de l'insertion d'une ligne).
    J'ai essayé de ne mettre que la ligne g_object_set, et il me colore tout mon tableau en gris (couleur que j'ai choisi). Et il fait la même chose si je rajoute entre chaque insertion de colonne la redéfinition de "background-gdk" en alternant blanc et gris.

    Alors comment on fait pour avoir une alternance de colonnes blanches et grises ?

    DBoJ

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

Discussions similaires

  1. [AC-2010] Couleur colonne dans zone de liste
    Par gwent dans le forum IHM
    Réponses: 8
    Dernier message: 28/03/2012, 15h28
  2. [XL-2003] Couleur de police dans première colonne de ListView
    Par Cocotte278 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/10/2011, 12h10
  3. Réponses: 0
    Dernier message: 01/02/2011, 18h39
  4. Réponses: 2
    Dernier message: 09/09/2009, 14h08
  5. Couleurs de colonnes dans un tableau
    Par MithzeWhite dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 25/09/2007, 15h56

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