GTK C - 使用g_signal_connect传递多个变量

时间:2014-06-19 18:57:14

标签: c gtk

所以,我正在努力实现以下目标:

用户正在选择文件,该文件的路径以变量filename保存。选择文件后,用户通过chmod选择chmod想要设置。

我有这样的事情:

g_signal_connect (ux, "toggled",G_CALLBACK(user_read_only), (gpointer *)ux);

并且函数user_read_only:

void user_read_only(GtkWidget *widget, gpointer *data)
{
   if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data))){
       int stat;
       stat = chmod(filename, S_IRUSR);
       printf("Added Read attribute to user in file: %s\n", filename);
   } else {
      printf("No Read attribute to user in file: %s\n", filename);
   }
}

我的问题是:如何将文件名传递给我的回调函数?当我尝试:

g_signal_connect (ux, "toggled",G_CALLBACK(user_read_only), (gpointer *)ux,filename);

我收到的错误是我只能传递1个变量。

1 个答案:

答案 0 :(得分:2)

gpointer类型的数据参数是您传递要传递给回调的任何类型的数据。

g_signal_connect (ux, "toggled",G_CALLBACK(user_read_only), (gpointer *)filename);

应该做的伎俩。您不需要将GTK实例(ux)作为数据传递。您还需要将功能更改为:

void user_read_only(GtkWidget *widget, gpointer *data)
{
   if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))){
       int stat;
       stat = chmod(data, S_IRUSR);
       printf("Added Read attribute to user in file: %s\n", (char *)data);
   } else {
      printf("No Read attribute to user in file: %s\n", (char *)data);
   }
}