c - GTK+ 将组合框文本传递给变量

标签 c gtk

我目前正在使用 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);
}

但是我从打印函数得到的错误如下:

(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);

最佳答案

您正在尝试获取 GtkButton 的事件文本。发生这种情况的方式是 selectgame (或任何其他回调)的第一个参数是触发事件的小部件。所以你想要这个:

g_signal_connect(G_OBJECT(downloadbutton), "clicked",
                       G_CALLBACK(selectgame), gamelist);

其中 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 的最后一个参数是回调的第二个参数。

另请参阅:g_signal_connect documentation

关于c - GTK+ 将组合框文本传递给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24467291/

相关文章:

将递归函数转换为尾递归

C++ GTKmm - 将文本插入到具有多个缓冲区和更改文本的 TextView

windows - Windows 7 下 GTK 中 gtk_widget_queue_draw 中的内存泄漏

C 正确使用 free

python - 设置 Gtk.ComboBoxText 默认项?

c - 没有用户输入的 GtkEntryCompletion?

python - 在 gtk textview 中使用系统等宽字体

python - C中如何判断一个内存页是否被mmaped

c - 如何将文件中的字符分配给 char 类型变量? (C)

c - 在 C 中编译 parse_command() 函数时出错