0

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

4

2 回答 2

2

虽然调用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 是否重要,但在某些情况下它非常重要,因此养成以正确方式进行操作的习惯可能是个好主意。

如果您不确定我所说的“构造块”是什么意思,请查看 Vala Tutorial on GObject-Style Construction中的部分。

于 2012-06-04T00:54:20.473 回答
1
set_orientation(Orientation.VERTICAL);
于 2012-06-03T21:24:05.520 回答