2012-06-03 54 views
0

我做了一個類的whoss父類是在vala gtk.box。不支持鏈接到框架構造函數,所以,如何在構造函數中設置框的方向?是可以更改gtk中方塊的方向嗎?

+0

你是什麼意思的方向?它看起來不像Box的構造函數接受任何參數:http://unstable.valadoc.org/#!api=gtk+-2.0/Gtk.Box。 – Hassan

+0

在gtk + -2.0中,Gtk.Box沒有構造函數(它是一個不能實例化的抽象類),但是它在gtk + -3.0中有。看到http://valadoc.org/#!api=gtk+-3.0/Gtk.Box.Box – nemequ

回答

1

在呼籲this.set_orientation (Gtk.Orientation.VERTICAL)可能的工作,要做到這一點更正確的方法是在構造時設置orientation屬性,就像Gtk.Box默認的構造函數。在瓦拉,你會做這樣的事情:

public class MyBox : Gtk.Box { 
    public MyBox() { 
    GLib.Object (orientation: Gtk.Orientation.VERTICAL); 
    } 
} 

在C級,這不僅僅是調用set_orientation有點不同......它會產生一些有點像這樣(簡化爲清楚起見):

MyBox* my_box_new() { 
    return g_object_new (GTK_TYPE_BOX, "orientation", GTK_ORIENTATION_VERTICAL, NULL); 
} 

調用set_orientation(或設置orientation屬性),而另一方面,會產生這樣的:

MyBox* my_box_new() { 
    MyBox* self = g_object_new (GTK_TYPE_BOX, NULL); 
    gtk_box_set_orientation (GTK_BOX(self), GTK_ORIENTATION_VERTICAL); 
    return self; 
} 

的d在第一個版本中,方向將在實例化(換句話說,在每個祖先類的構造塊期間)被正確設置爲,而對於第二個版本,將首先以錯誤的方向創建對象,那麼方向將會改變。我不確定這種差異是否對Gtk.Box有重大意義,但在某些情況下,這一點非常重要,因此養成按照正確方式進行操作的習慣可能是一個好主意。

如果您不確定「構造塊」是什麼意思,請參閱Vala教程中有關GObject-Style Construction的部分。

+0

不錯!我知道了。爲什麼「set_orientation()」和方向屬性不在文檔中(valadoc)?它只顯示公共方法? – angrymadcat

+1

它們位於Gtk.Orientable的文檔中,該文檔是Gtk.Box實現的。 – nemequ

+0

只是爲了迂腐,在兩種情況下它都會生成'g_object_new(MY_TYPE_BOX,...)',這不重要! –

1
set_orientation(Orientation.VERTICAL);