Signal handler con gtkmm

Dopo aver dichiarato un widget e una funzione void in una classe Gtk::Window

#include <gtkmm/button.h>
#include <gtkmm/window.h>

class HelloWorld : public Gtk::Window
{

public:
  HelloWorld();
  virtual ~HelloWorld();

protected:
  //Signal handlers:
  void on_button_clicked();

  //Member widgets:
  Gtk::Button m_button;
};

bisogna “collegare” la funzione al widget in modo che venga chiamata ogni volta che un segnale viene lanciato:

#include "helloworld.h"
#include <iostream>

HelloWorld::HelloWorld()
: m_button("Hello World")   // creates a new button with label "Hello World".
{
  ...
  m_button.signal_clicked().connect(sigc::mem_fun(*this,
              &HelloWorld::on_button_clicked));
  ...
}

void HelloWorld::on_button_clicked()
{
  std::cout << "Hello World" << std::endl;
}

Notare che l’ handler non ha parametri.

A volte si può usare uno stesso handler per più widget simili.
Allora si rende necessario il passaggio di parametri o argomenti.
Per passare argomenti, bisogna fare il binding:

...
void on_button_clicked(Glib::ustring, int val);
...
// sigc::bind<Tipo1, Tipo2, ...>(HANDLER, param1, param2, ...);
m_button1.signal_clicked().connect( sigc::bind<Glib::ustring, int>( sigc::mem_fun(*this, &HelloWorld::on_button_clicked), "xyz", 3) );

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...