所以,我正在努力实现以下目标:
用户正在选择文件,该文件的路径以变量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个变量。
答案 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);
}
}