我目前正在使用GTK + 2.x编写一个程序,我有一个组合框,里面有一些选项。我想,当我按下按钮将选定的选项传递给变量时。这就是我的功能:
static void selectgame(GtkComboBox *gamelist, gpointer data){
gchar *game = gtk_combo_box_get_active_text(gamelist);
g_print( "Selected (simple): >> %s <<\n", ( game ? game : "NULL" ) );
g_free(game);
}
但是我从print函数得到的错误如下:
(Senorita.exe:2228): Gtk-CRITICAL **: gtk_combo_box_get_active_text: assertion `
GTK_IS_COMBO_BOX (combo_box)' failed
如果我将g_signal_connect设置为在更改组合框时调用该函数,则它可以正常工作。但是当按下按钮时,它不会。这是我按下按钮的代码:
g_signal_connect(G_OBJECT(downloadbutton), "clicked",
G_CALLBACK(selectgame), NULL);
答案 0 :(得分:0)
您正在尝试获取GtkButton的有效文本。发生这种情况的方法是selectgame(或任何其他回调)的第一个参数是触发事件的小部件。所以你想要这个:
g_signal_connect(G_OBJECT(downloadbutton), "clicked",
G_CALLBACK(selectgame), gamelist);
其中游戏列表是您的组合框
和
static void selectgame(GtkWidget *downloadbutton, GtkComboBox gamelist){
gchar *game = gtk_combo_box_get_active_text(gamelist);
g_print( "Selected (simple): >> %s <<\n", ( game ? game : "NULL" ) );
g_free(game);
}
你应该好好去!
原因是g_signal_connect
的最后一个参数是回调的第二个参数。