Bonjour,

J'ai un problème avec la fonction gtk_combo_box_text_get_active_text dans la fonction vb_changed, ligne 61

Elle me renvoie (null) en permanance :/

Quelqu'un a une idée ? :$

merci

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
127
128
129
130
131
132
#include <stdlib.h>
#include <gtk/gtk.h>
 
typedef struct FenetreObj FenetreObj;
struct FenetreObj
{
    gpointer window;
    gpointer entry;
    gpointer label;
    gpointer progressbar;
    gpointer spinner;
    gpointer checkbutton;
    gpointer buttonQuit;
    gpointer buttonPbar;
    gpointer comboBoxText;
};
 
static void cb_quit (GtkWidget *p_wid, gpointer *p_data)
{
    gtk_main_quit();
}
 
static void test_f(GtkWidget *p_wid, FenetreObj *p_data)
{
    const gchar *text = gtk_entry_get_text(GTK_ENTRY( p_data->entry));
    printf("\ncoucou : %s \n", text);
 
    gtk_label_set_text(GTK_LABEL(p_data->label), text);
}
 
static void spin_f(GtkWidget *p_wid, FenetreObj *p_data)
{
    const gint checkEtat = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(p_data->checkbutton));
    printf("\ncheckbox état  : %d \n", checkEtat);
 
    if(checkEtat)
        gtk_spinner_start(              GTK_SPINNER(p_data->spinner));
    else
        gtk_spinner_stop(               GTK_SPINNER(p_data->spinner));
}
 
static void pBar_f(GtkWidget *p_wid, FenetreObj *p_data)
{
    gint i = 0;
    gchar text[4] = "00";
    gtk_grab_add(p_wid); //bloque l'utilisateur
    for(i=0; i<=100; i+=1)
    {
        //g_usleep (100000);
        gtk_progress_bar_set_fraction(  GTK_PROGRESS_BAR(p_data->progressbar), (gdouble)i/100);
        sprintf(text,"%d", i);
        gtk_progress_bar_set_text(      GTK_PROGRESS_BAR(p_data->progressbar), text);
        //gtk_events_pending();
        gtk_main_iteration(); //doevents
        //gtk_main_iteration_do(1); //marche pas non plus
        printf("\ndebug j=%f, text=%s", (gdouble)i/100, text);
    }
    gtk_grab_remove(p_wid); //on rend la main
}
 
static void cb_changed(GtkWidget *p_wid, FenetreObj *p_data)
{
    const gchar *cbtext = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(p_data->comboBoxText));
    printf("\ndebug : %s, a été selectionné dans comboboxtext", cbtext);
 
}
 
 
int main (int argc, char **argv)
{
    GtkBuilder *p_builder = NULL;
    GError *p_err = NULL;
 
    gtk_init (&argc, &argv);/* Initialisation de GTK+ */
    p_builder = gtk_builder_new();/* Creation d'un nouveau GtkBuilder */
    if (p_builder != NULL)
    {
        gtk_builder_add_from_file(p_builder, "1.glade", &p_err);/* Chargement du XML dans p_builder */
        if (p_err == NULL)
        {
            //initialisation des pointeurs dans la structure
            FenetreObj fen1;
            fen1.window         = gtk_builder_get_object (p_builder, "window1");
            fen1.entry          = gtk_builder_get_object (p_builder, "entry1");
            fen1.label          = gtk_builder_get_object (p_builder, "label1");
            fen1.progressbar    = gtk_builder_get_object (p_builder, "progressbar1");
            fen1.checkbutton    = gtk_builder_get_object (p_builder, "checkbutton1");
            fen1.buttonQuit     = gtk_builder_get_object (p_builder, "button1");
            fen1.buttonPbar     = gtk_builder_get_object (p_builder, "button2");
            fen1.spinner        = gtk_builder_get_object (p_builder, "spinner1");
            fen1.comboBoxText   = gtk_builder_get_object (p_builder, "comboboxtext1");
 
            //connection callbacks
            g_signal_connect(       fen1.buttonQuit,   "clicked", G_CALLBACK (cb_quit), &fen1);
            g_signal_connect(       fen1.entry,        "changed", G_CALLBACK (test_f), &fen1);
            g_signal_connect(       fen1.checkbutton,  "toggled", G_CALLBACK (spin_f), &fen1);
            g_signal_connect(       fen1.buttonPbar,   "clicked", G_CALLBACK (pBar_f), &fen1);
            g_signal_connect(       fen1.comboBoxText, "changed", G_CALLBACK (cb_changed), &fen1);
 
 
            //comboBoxText
            gtk_combo_box_text_append_text( GTK_COMBO_BOX_TEXT(fen1.comboBoxText), "Texte 1");
            gtk_combo_box_text_append_text( GTK_COMBO_BOX_TEXT(fen1.comboBoxText), "Texte 2");
            gtk_combo_box_text_append_text( GTK_COMBO_BOX_TEXT(fen1.comboBoxText), "Texte 3");
            gtk_combo_box_text_append_text( GTK_COMBO_BOX_TEXT(fen1.comboBoxText), "Texte 4");
            gtk_combo_box_text_remove(      GTK_COMBO_BOX_TEXT(fen1.comboBoxText), 1);
 
 
            //paramatrage fenetre
            /*GTK_WIN_POS_NONE : la fenêtre aura une position aléatoire lors de son affichage ;
            GTK_WIN_POS_CENTER : la fenêtre sera centrée à l'écran ;
            GTK_WIN_POS_MOUSE : le coin supérieur droit de la fenêtre correspondra à la position de la souris au moment de l'affichage ;
            GTK_WIN_POS_CENTER_ALWAYS : la fenêtre sera centrée et ne pourra être déplacée ;
            GTK_WIN_POS_CENTER_ON_PARENT : la fenêtre sera centrée par rapport à la fenêtre parente (notion abordée dans le prochain chapitre).*/
            gtk_window_set_position(        GTK_WINDOW(fen1.window), GTK_WIN_POS_CENTER);
            gtk_window_set_title(           GTK_WINDOW(fen1.window), "Titre");
            //gtk_window_move(GTK_WINDOW(p_win), GTK_WIN_POS_CENTER_ALWAYS, GTK_WIN_POS_CENTER_ALWAYS);
 
 
            gtk_widget_show_all(            fen1.window);
            gtk_main();
        }
        else
        {
            /* Affichage du message d'erreur de GTK+ */
            g_error("%s", p_err->message);
            g_error_free(p_err);
        }
    }
 
    return EXIT_SUCCESS;
}
Sortie de console;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
debug : (null), a été selectionné dans comboboxtext
checkbox état  : 1 
 
checkbox état  : 0 
 
(builder:10215): Gtk-CRITICAL **: IA__gtk_tree_model_get_column_type: assertion `index >= 0' failed
 
(builder:10215): Gtk-CRITICAL **: IA__gtk_combo_box_text_get_active_text: assertion `column_type == G_TYPE_STRING' failed
Il y a aussi ce "debug : (null), a été selectionné dans comboboxtext" tout au début, alors que je clique sur un checkbox... Je ne comprends pas pourquoi il rentre dans la fonction cb_changed à la première intervention de l'utilisateur sur l'interface graphique