::-- ehu4ever [DateTime(2005-08-10T12:59:15Z)] TableOfContents

1. 左顾右盼、瞻前顾后

GTK中有很多的widget是可以用鼠标和键盘操作来改变外观的,比如后面要说到range。也有一些widget在显示大块的数据时,可以根据一些属性自动地作出调整。

当我们对range进行操作的时候,程序的界面当然会有相应的变化。可行的方法就是当一个widget的adjustment改变的时候,它发出自己的“事件”信号,或是给callback传入一个新的数据,又或是让callback自己查看widget的某一个(或多个)属性。不决定怎样改变这个widget的外观。

但是我们也可以多个widget的adjustment组合起来,这样,在我改变其中某一个widget的外观时,其它的几个也会跟着改变。一个典型的例子是将scrollba和一个panning viewport或者是一个scrolling text area的adjustment组合在一起。如果每个widget都用自己的方式管理adjustment的值,那么编程的时候就得自己在各个widget之间传递adjustment的值。

对于这个难题,GTK的解决方法是Adjustment,它不是一个widget而是让多个widget可以灵活地保存和共享adjustment。Adjustment的一个常见的用途是保存scrollbars和scale这样的widget的各种参数的值。另外,由于Adjustment继承了Object,所以它有一些特别的能力。其中最重要的,是也可以发出各种“事件信号”,这样对这些“事件信号”进行一些事件处理,或是用来在多个widget之间传递adjustment信息。

之后,让我们来看看adjustment和几个widget的配合使用:Progress Bars、Viewports、 Scrolled Windows等等。