调整的内部
如果你想要创建一个自己的处理函数以响应用户对Range或SpinButton部件的调整。你可以使用Gtk::Adjustment的get_value()和set_value()方法访问其值:
如前所述,Gtk::Adjustment可以发射信号。而所有可调整部件都会将信号处理函数连接到其调整对象的value_changed信号你的程序也可以如此。这使得当Scrollbar和其他可调整部件共享一个Adjustment对象时,如果你操纵滚动条与其共享调整对象的其他可调整部件将会自动更新。
因此,例如,如果你有一个Scale部件并且你想要当调整值变更以后更改图片的旋转角度,你可以创建一个如下所示的信号处理函数:
void cb_rotate_picture (MyPicture* picture) { picture->set_rotation(adj->get_value()); ...
并且将其连接到比例部件的调整对象上,如下所示:
adj->signal_value_changed().connect(sigc::bind<MyPicture*>(sigc::mem_fun(*this, &cb_rotate_picture), picture));
如果一个部件重新配置其Adjustment的upper和lower字段(例如:用户向文本部件添加了更多的文本),那么它将发出changed信号。
Range部件通常会将处理程序连接到此信号,并更改其外观响应变更 - 例如:滚动条中的滑块将随着Adjustment中lower与upper的差值的增大逐渐变小,反之则逐渐增大。
除非你正在编写新的范围部件,否则你可能永远不需要将处理程序连接到这个信号。
adjustment->signal_changed();