es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para conectar la señal de clic “OPEN” al métodoOpenStub, puedes usar signal_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));


    Esta línea conectará la señal "activate" del widget `Open` al método `OpenStub`. Finalmente, asegúrate de agregar el widget `Open` al `FileMenu` con: ```c++ FileMenu->append(*Open);

    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.

Comments are closed.