親クラスがvalaのgtk.boxであるクラスを作成しました。ボックス コンストラクターへのリンクはサポートされていないため、コンストラクターでボックスの方向を設定するにはどうすればよいですか??
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チュートリアルのセクションをご覧ください。
set_orientation(Orientation.VERTICAL);