Écriture de gestionnaires de signal

Pour savoir quel type de gestionnaire de signal vous pouvez connecter, regardez dans la documentation de référence ou dans le fichier d'en-tête. Voici un exemple de déclaration de signal que vous pouvez voir dans les fichiers d'en-tête de gtkmm :

Glib::SignalProxy<bool(Gtk::DirectionType)> signal_focus()

Other than the signal's name (focus), the template arguments are important to note here. The first argument, bool, is the type that the signal handler should return; and the type within parentheses, Gtk::DirectionType, is the type of this signal's first, and only, argument. By looking at the reference documentation, you can see the names of the arguments too.

The same principles apply for signals which have more arguments. Here's one with three (taken from <gtkmm/textbuffer.h>):

Glib::SignalProxy<void(TextBuffer::iterator&, const Glib::ustrin&, int)> signal_insert();

It follows the same form. The first type is void, so that should be our signal handler's return type. The following three types are the argument types, in order. Our signal handler's prototype could look like this:

void on_insert(TextBuffer::iterator& pos, const Glib::ustring& text, int bytes)