2014-06-19 22 views
1

所以传递多个变量,我想实现以下目标:GTKÇ - 使用的g_signal_connect

用户是选择文件,路径,文件保存在变量名。选择文件用户后,通过复选框选择哪个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个变量。

回答

2

gpointer类型的数据参数是为了让您传递想要传递到回调的任何类型的数据。

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

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

+0

不幸的是:(我需要检查函数,ux是否切换和文件名是第二个paremter传递即使我只通过文件名我得到: 'format'%s'需要类型为'char *'的参数,但参数2的类型为' – Abdizriel

+0

您已经在第一个参数(作为窗口小部件)中传递了ux,并且在调用printf时需要强制转换(char *)文件名假设你指出的格式警告在你的编译系统中被认为是一个错误 – yaman

+0

由于我现在有更少的错误和文件名称呼叫良好现在我有错误: 's8.c:在函数'main ': s8.c:49:1:警告:'GtkStock'已弃用[-Wdepreca (“Open File”,NULL,GTK_FILE_CHOOSER_ACTION_OPEN,GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,GTK_STOCK_OPEN,GTK_RESPONSE_ACCEPT,NULL);对话框= gtk_file_chooser_dialog_new ^ s8.c:49:1:警告: 'GtkStock' 被弃用[-Wdeprecated-声明] s8.c:78:29:错误: 'GTK_CAN_FOCUS' 未申报(第一在此函数使用) GTK_WIDGET_UNSET_FLAGS(乌尔,GTK_CAN_FOCUS); ^ ' – Abdizriel