编写信号处理函数

要找到你可以连接到信号的信号处理函数类型,你可以查看它的参考文档或者是头文件。这是一个你可能在gtkmm头文件中看到的信号声明示例:

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

除了信号名为focus之外,这里的膜拜参数很重要。第一个参数bool,表示信号处理函数的返回值应该是个bool类型。而括号中的Gtk::DirectionType表示信号所期望调用的函数的第一个也是唯一一个参数的类型。通过查看参考文档你还可以看到参数的名称。

对于接受期望调用的函数有更多参数的信号也是一样的阅读规则。以下声明取自<gtkmm/textbuffer.h>

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

以一样的阅读规则阅读后可知,该信号所期望调用的函数的返回值类型为void,括号内三种类型为函数的三个参数类型。所以我们的信号处理函数原型可能如下所示:

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