0

親クラスがvalaのgtk.boxであるクラスを作成しました。ボックス コンストラクターへのリンクはサポートされていないため、コンストラクターでボックスの方向を設定するにはどうすればよいですか??

4

2 に答える 2

2

呼び出しthis.set_orientation (Gtk.Orientation.VERTICAL)は機能するかもしれませんが、これを行うためのより正しい方法はorientation、Gtk.Boxのデフォルトコンストラクターと同じように、構築時にプロパティを設定することです。ヴァラでは、次のようなことをします。

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

経営幹部レベルでは、これは単に呼び出すこととは少し異なり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;
}

違いは、最初のバージョンでは、インスタンス化中に(つまり、各祖先クラスの構成ブロック中に)方向が正しく設定されるのに対し、2番目のバージョンでは、オブジェクトは最初に間違った方向で作成され、次に向きが変わります。この違いがGtk.Boxにとって重要かどうかはわかりませんが、場合によっては非常に重要であるため、正しい方法で行う習慣を身に付けることをお勧めします。

「コンストラクトブロック」の意味がわからない場合は、GObjectスタイルのコンストラクションに関するValaチュートリアルのセクションをご覧ください。

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