gtkmm:如何在没有构建器的情况下创建弹出菜单?

时间:2019-03-08 07:31:55

标签: c++ gtk gtkmm

我正在尝试使用C ++制作GTK3应用程序。因为这是我的第一个gtkmm应用,而且它确实很小,所以我避免使用简单的代码构建器和放置小部件。

标题栏的菜单按钮有以下代码段:

Gtk::MenuButton mbtn;
Gtk::Menu menu;
Gtk::MenuItem mnitSettings {"Settings"};
Gtk::MenuItem mnitAbout {"About"};
mbtn.set_image_from_icon_name("open-menu-symbolic");
menu.append(mnitSettings);
menu.append(mnitAbout);
menu.show_all();
mbtn.set_popup(menu);

它工作正常,但是我注意到大多数GTK3应用程序在按钮菜单上都有某种Gtk :: Popover,在其边缘上具有过渡动画和指向箭头。令我沮丧的是,大多数GTK3应用程序都使用了builder,所以我不知道该怎么做。

有Gtk :: MenuButton :: set_popover(Gtk :: Popover&),但是我无法将菜单添加到Popover包装器中(我收到了"Attempting to add a widget with type gtkmm__GtkMenu to a container of type gtkmm__GtkPopover, but the widget is already inside a container of type GtkWindow"警告)。

在这种情况下如何实现弹出菜单?

1 个答案:

答案 0 :(得分:1)

我只是想办法。

Gtk::MenuButton mbtn;
Glib::RefPtr<Gio::Menu> menu = Gio::Menu::create();
menu->append("Settings", "app.settings");
menu->append("About", "app.about");
mbtn.set_menu_model(menu);

动作可以附加:

app->add_action("settings", glibc::ptr_fun(&some_useful_func));