我正在尝试使用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));