2017-07-17 95 views
0

我已經使用Glade構建了GTK GUI,這意味着我有一個* .glade文件,可以與我的應用程序一起使用。我已經能夠獲得小部件來與它們進行交互,但我對於如何將信號處理程序連接到Menu條目是無能爲力的。gtkmm/glade - 將信號處理程序連接到MenuShell

我想連接的信號是單擊菜單項時發出的信號。就像你在網絡瀏覽器中會做的一樣,你去到文件,然後點擊一個條目。

該事件的名稱是什麼,以及要調用的gtkmm函數是什麼? 我很困惑,我應該嘗試與哪些元素進行交互,是GtkMenu,GtkMenuShell ...?更好的是,我可以從Glade的界面做到嗎?

起初我以爲事件是activate-current所以我嘗試使用邏輯上連接到它的方法,就像按鈕上的clicked事件一樣。

這裏是不工作的代碼,因爲該方法不存在:

Gtk::MenuShell* help_menu; p_builder->get_widget("helpMenu", help_menu); help_menu->signal_activate_current().connect(sigc::ptr_fun(&on_help_menu_activate_current));

src/GUI.cpp:11:16: error: ‘class Gtk::MenuShell’ has no member named ‘signal_activate_current’ help_menu->signal_activate_current().connect(sigc::ptr_fun(&on_help_menu_activate_current));

回答

0

GtkMenuShell是一個抽象類,你可能正在尋找GtkMenuGtkMenuBar。兩者都實施GtkMenuShell

菜單中的項目是GtkMenuItem,你可能會想「激活」從這些項目信號。

The MenuItem widget and the derived widgets are the only valid children for menus.

Their function is to correctly handle highlighting, alignment, events and submenus.

您可以通過Glade設置回調名稱,然後通過GtkBuilder方法以編程方式連接處理程序。