#c #gtk #gtkmm
#c #gtk #gtkmm
Вопрос:
Я пытаюсь создать приложение GTK3 на C . Поскольку это мое первое приложение gtkmm и оно действительно маленькое, я избегаю builder и размещаю виджеты с помощью простого кода.
У меня есть такой фрагмент для кнопки меню в строке заголовка:
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 amp;), но мне не удалось добавить свое меню во всплывающую оболочку (я получил "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:
Я только что выяснил, как это сделать.
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(amp;some_useful_func));