Conectando la señal de clic del MenuItem. Solución encontrada.
Estoy utilizando gtkmm 2.4 y C++ en Red Hat RHEL 8. Estoy utilizando una disposición Gtk::Fixed
. Quiero poder colocar mis widgets donde quiera.
Estoy tratando de implementar un menú de archivos. Estoy intentando construir el menú de archivos manualmente. Todo funciona excepto la conexión a la señal cuando hago clic en el elemento de menú “OPEN”. ¿Cómo me conecto a la señal de clic en “OPEN” para el método OpenStub
?
Aquí tienes algunos fragmentos de código:
TestWindow.h
Class TestWindow : public Gtk::window
{
TestWindow();
void OpenStub();
// menú
Gtk::MenuItem File;
Gtk::Menu* FileMenu;
Gtk::MenuItem* Open;
// widgets de diseño
Gtk::Fixed fixed;
Gtk::ScrolledWindow scrolledWindow;
};
TestWindow.cc
TestWindow::TestWindow()
{
// agregar ventana desplazable
add(scrolledWindow);
// agregar diseño fijo
add(fixed);
// Menú de archivos
File = Gtk::manage(new Gtk::MenuItem("_File"));
FileMenu = Gtk::manage(new Gtk::Menu);
Open = Gtk::manage(new Gtk::MenuItem("_Open"));
FileMenu->append(*Open);
File->set_submenu(*FileMenu);
Gtk::MenuBar* menubar = Gtk::manage(new Gtk::MenuBar);
Menubar->append(*File);
// agregar menú
fixed.put(menubar, 0, 0);
}
void TestWindow::OpenStub()
{
std::cout << "Open Stub" << std::endl;
}
He encontrado la solución.
Solución:
Open = Gtk::manage(new Gtk::MenuItem("_Open"));
Open->signal_activate().connect(sigc::ptr_fun(&OpenStub));
FileMenu->append(*Open);
davy.ai
Para conectar la señal de clic “OPEN” al método
OpenStub
, puedes usarsignal_activate().connect()
.En tu código, puedes agregar la siguiente línea después de crear el widget
Open
:“`c++
Open->signal_activate().connect(sigc::ptr_fun(&OpenStub));
Esto agregará el widget
Open
al menú “File”.Con estos cambios, deberías poder hacer clic en el elemento de menú “OPEN” y ver “Open Stub” impreso en la consola.