使用 signal_connect 在 C 中更改 GTK 标签

标签 c user-interface gtk signals

你好,我在 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 函数中设置的一个特定字符串,但我不能将它作为参数传递给函数,你有什么建议? .

最佳答案

这就是 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]);

关于使用 signal_connect 在 C 中更改 GTK 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29321622/

相关文章:

c - C 中的指针和二维数组

struct proc 中的starttime 与solaris 中的struct psinfo_t 的比较

java - 从 Java GUI 检索多个文件

vim - 让 GTK+ 标识符通过你完成我的建议显示

c# - Lotus Notes c API 问题

python - 无法将多维数组传递给 *.pyx 中的 C 函数

ruby - Ruby 的最佳 GUI 框架。不是鞋子

java - 单击按钮后链接到其他面板

ubuntu - 启用 GtkFileChooserDialog 以选择文件或文件夹

opengl - Pygobject GTK3 中 Gtk.GLArea 的使用