我改变了这个:
static GtkActionEntry menu_items[] = {
{ "OpenFile", GTK_STOCK_OPEN, NULL, "<control>O", NULL, G_CALLBACK(file_open) },
...
},
......对此:
static GtkActionEntry menu_items[] = {
{ "OpenFile", GTK_STOCK_OPEN, NULL, gtk_accelerator_name(GDK_o, GDK_CONTROL_MASK), NULL, G_CALLBACK(file_open) },
...
},
...现在我得到“错误:初始化元素不是常数”。我需要做些什么改变才能实现这个目标?
GtkActionEntry的第四个参数是一个gchar指针,gtk_accelerator_name返回到我能看到的地方。
menu_items用于静态函数,如下所示:
static gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
static GtkWidget *get_menubar_menu(GtkWidget *win) {
GtkActionGroup *action_group = gtk_action_group_new("Menu");
gtk_action_group_add_actions(action_group, menu_items, nmenu_items, 0);
...
}
答案 0 :(得分:2)
您不能这样做,static
数据需要在编译时确定,但gtk_accelerator_name()
可能驻留在编译时可能甚至不可用的共享对象中。
因此,您需要在启动时添加代码以通过数组,然后在调用gtk_action_group_add_actions()
时实际使用它,并根据需要将每个字符串传递给gtk_accelerator_name()
。