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个变量。
不幸的是:(我需要检查函数,ux是否切换和文件名是第二个paremter传递即使我只通过文件名我得到: 'format'%s'需要类型为'char *'的参数,但参数2的类型为' – Abdizriel
您已经在第一个参数(作为窗口小部件)中传递了ux,并且在调用printf时需要强制转换(char *)文件名假设你指出的格式警告在你的编译系统中被认为是一个错误 – yaman
由于我现在有更少的错误和文件名称呼叫良好现在我有错误: '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