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

gtkmm: how to create popover menu without builder?

我正在尝试使用 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 应用程序都使用构建器,所以我不明白如何做到这一点。

有 Gtk::MenuButton::set_popover(Gtk::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" 警告)。

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

我刚刚知道怎么做了。

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));