我在vala中做了一个类whoss父类是gtk.box。不支持链接到框构造函数,那么,如何在构造函数中设置框的方向?
答案 0 :(得分:1)
set_orientation(Orientation.VERTICAL);
答案 1 :(得分:1)
虽然调用this.set_orientation (Gtk.Orientation.VERTICAL)
可能有效,但更正确的方法是在构造时设置orientation
属性,就像Gtk.Box默认构造函数一样。在Vala,你会做这样的事情:
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;
}
不同之处在于,对于第一个版本,方向将在实例化期间正确设置(换句话说,在每个祖先类的构造块期间),而对于第二个版本,对象将首先使用错误的方向创建,然后将更改方向。我不确定这种差异对于Gtk.Box是否有意义,但在某些情况下它非常重要,所以养成以正确的方式做这件事的习惯可能是个好主意。
如果您不确定“构造块”的含义,请查看GObject-Style Construction上Vala教程中的部分。