GIO: 如何启用GMenuItem?GMenu enable disable

问题描述 投票:0回答:1

问题

我创造了一个 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); 
c gtk gtk3 gio
1个回答
0
投票

你的问题: 菜单项没有连接到现有的动作。

您的解决方案: 设置正确 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

© www.soinside.com 2019 - 2024. All rights reserved.