こう思ったかもしれません。「なるほど、これはいいね。だけどもし自分でハンドラを生成して、ユーザーのRangeウィジットやSpinButtonへの変更に適応したいと思ったらどうするんだい?」 Gtk::Adjustmentの値にアクセスするにはget_value()とset_value()メソッドが使えます:
前述したように、Gtk::Adjustmentはシグナルを発行します。このおかげでもちろん、Adjustmentを共有しているScrollbarとその他の調整可能なウィジットとの間で更新が自動的に行われるわけです。全ての調整可能なウィジットは、シグナルハンドラを自身が持つアジャストメントのvalue_changedシグナルに接続しています。これは他のコードでも行えます。
ですから、例えば、Scaleウィジットがあるとして、この値を変えたときに画像を回転させたいとします。次のようなシグナルハンドラを作ってください:
void cb_rotate_picture (Gtk::Widget *picture)
{
picture->set_rotation (adj->value);
...
そしてこれをスケールウィジットのアジャストメントに接続します:
adj.value_changed.connect(sigc::bind<Widget*>(sigc::mem_fun(*this,
&cb_rotate_picture), picture));
ウィジットが自身のAdjustmentのupperやlowerフィールドの値を再設定したらどうなるのでしょう。例えば、ユーザーがテキストウィジットにさらにテキストを追加した場合には? この場合、changedシグナルが発行されます。
Rangeウィジットはこのシグナルをハンドラに接続する典型的なものです。シグナルは変更を反映してウィジットの見た目を変えます。例えば、スクロールバー中のスライダーの大きさは、Adjustmentの上限値(upper)と下限値(lower)の差分に反比例するように、伸びたり縮んだりします。
新しい種類のレンジウィジットを作成するときを除けば、おそらくこのシグナルにハンドラを接続する必要はまずないでしょう。
adjustment->changed();