我创造了一个 GMenuModel
并设置为应用程序菜单,但应用程序中的项目被禁用。
Q: 我如何启用它们?
GMenuModel * createMenu(){
GMenu * menu = g_menu_new();
g_menu_append(menu, "Item1", "item1_action1");
return (GMenuModel*)menu;
}
...
GMenuModel * menu = createMenu(GTK_APPLICATION(app));
gtk_application_set_app_menu(GTK_APPLICATION(app), (GMenuModel*)menu);
g_object_unref (menu);
GActionEntry actions[] = {
{"item1_action1", exampleAction, NULL, NULL, NULL}
};
g_action_map_add_action_entries(G_ACTION_MAP(app),actions, 1, NULL);
你的问题: 菜单项没有连接到现有的动作。
您的解决方案: 设置正确 detailed_action
当创建菜单项时。(它缺少前缀 app.
).
GMenuModel * createMenu(){
GMenu * menu = g_menu_new();
g_menu_append(menu, "Item1", "app.item1_action1");
return (GMenuModel*)menu;
}
GTK_DEBUG=interactive ./a.out
Actions
的组合框中。也就是说,你注册的那些 g_action_map_add_action_entries
!Prefix
显示 app
.g_action_map_add_action_entries(G_ACTION_MAP(app),...)
为应用程序注册动作。因此,它增加了一个 app
前缀到动作名称上。所以在创建菜单时,你需要使用全名(即 app.item1_action1
)作为 detailed_action
名。
要注意前缀一栏,上面写着 app