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 for Button的菜单,这些菜单具有过渡动画,并将箭头指向其边缘。为了我的悲伤,大多数GTK3应用程序都使用构建器,因此我无法理解如何做到这一点。

有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"警告)。

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

我刚刚弄清楚了如何。

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

相关内容

最新更新