【问题标题】:GIO: How to enable a GMenuItem? GMenu enable / disableGIO:如何启用 GMenuItem? GMenu 启用/禁用
【发布时间】:2020-05-02 12:57:53
【问题描述】:

问题

我创建了一个GMenuModel 并将其设置为应用程序菜单。 但是,应用中的项目被禁用。

问:如何启用它们?

代码

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】:

    您的问题:菜单项未连接到现有操作。

    您的解决方案:在创建菜单项时设置正确的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

    【讨论】:

      猜你喜欢
      • 2012-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-08
      • 2014-04-27
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多