Εγγραφή χειριστών σημάτων

Για την εύρεση του τύπου του χειριστή σήματος που μπορείτε να συνδέσετε με ένα σήμα, μπορείτε να το κοιτάξετε στην τεκμηρίωση αναφοράς ή στο αρχείο κεφαλίδας. Ιδού ένα παράδειγμα της δήλωσης σήματος που μπορείτε να δείτε στις κεφαλίδες gtkmm:

Glib::SignalProxy1<bool, Gtk::DirectionType> signal_focus()

Πέρα από το όνομα του σήματος (focus), δύο πράγματα είναι σημαντικά να σημειώσετε εδώ: ο αριθμός που ακολουθεί τη λέξη SignalProxy στην αρχή (1, σε αυτήν την περίπτωση) και οι τύποι στη λίστα (bool και Gtk::DirectionType). Ο αριθμός δείχνει πόσα ορίσματα πρέπει να έχει ο χειριστής σήματος· ο πρώτος τύπος, bool, είναι ο τύπος που ο χειριστής σήματος πρέπει να επιστρέψει· και ο επόμενος τύπος, Gtk::DirectionType, είναι ο τύπος του πρώτου αυτού του σήματος και μόνο, όρισμα. Κοιτώντας στην τεκμηρίωση αναφοράς, μπορείτε να δείτε τα ονόματα των ορισμάτων επίσης.

Οι ίδιες αρχές εφαρμόζονται για σήματα που έχουν περισσότερα ορίσματα. Ιδού ένα με τρία (ελήφθησαν από <gtkmm/textbuffer.h>):

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

Ακολουθεί την ίδια μορφή. Ο αριθμός 3 στο τέλος του ονόματος τύπου δείχνει ότι ο χειριστής σήματος θα χρειαστεί τρία ορίσματα. Ο πρώτος τύπος στον κατάλογο τύπων είναι void, έτσι ώστε πρέπει να είναι ο τύπος επιστροφής του χειριστή σήματός μας. Οι ακόλουθοι τρεις τύποι είναι οι αποδεκτοί τύποι ορίσματος. Το πρωτότυπο του χειριστή σήματός μας μπορεί να μοιάζει με αυτό:

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