可以在gtk中更改框的方向吗?

时间:2012-06-03 19:35:07

标签: gtk vala

我在vala中做了一个类whoss父类是gtk.box。不支持链接到框构造函数,那么,如何在构造函数中设置框的方向?

2 个答案:

答案 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教程中的部分。