您好我在GTK中制作GUI我有一些菜单项,我试图在特定菜单元素上单击鼠标后更改主标签。
widgets[i][0] = gtk_menu_item_new_with_label(arrayOfStrings[i]);
//arrayOfStrings is : char** arrayOfStrings
gtk_menu_shell_append(GTK_MENU_SHELL(indicator_menu), widgets[i][0]);
我正在尝试这个:
void set_main_label(GtkWidget *widget)
{
app_indicator_set_label(indicator, arrayOfString[2],arrayOfString[2]);
}
之后我称之为:
g_signal_connect(widgets[i][0], "activate",G_CALLBACK(set_main_label), widgets[i][0]);
但我的问题是 void set_main_label(void)必须有void参数。我需要传递存储在arrayOfStrings中的字符串(char *)。你有什么建议?现在我只能将标签更改为 set_main_label 函数中设置的一个特定字符串,但我不能将其作为参数传递给函数,你有什么建议? 。
答案 0 :(得分:2)
这是user_data
参数的用途。 set_main_label()
没有void
参数列表 - 请查看documentation:
void
user_function (GtkMenuItem *widget,
gpointer user_data)
您可以通过user_data
参数将您喜欢的任何参数传递给回调。但是在连接信号时必须知道它。
所以你可以这样做:
void
set_main_label(GtkMenuItem *widget, gpointer user_data)
{
const char *label = (const char *)user_data;
app_indicator_set_label(indicator, label, label);
}
g_signal_connect(widgets[i][0], "activate",
G_CALLBACK(set_main_label), arrayOfString[2]);