我想在我写的小部件上使用Gtk.Widget' ìnstall_style_property ()
。在文档中,此方法声明为static
,所以我想知道为什么valac仍抱怨我从静态方法调用它:
public class MyClass : Gtk.Widget {
public static void init () {
ParamSpecDouble _the_property = new ParamSpecDouble
(
"dummy", "dummy", "dummy,
0, double.MAX, 0,
ParamFlags.READWRITE | ParamFlags.STATIC_STRINGS
);
install_style_property (_the_property);
}
}
void main (string? argv) {
Gtk.init (ref argv);
MyClass.init ();
}
错误消息:
test.vala:11.9-11.46:error:访问实例成员`Gtk.Widget.install_style_property'拒绝
如果这不起作用,在Gtk中为自定义小部件安装自定义样式属性的首选模式是什么?就个人而言,我不希望在使用我的小部件之前不必调用init ()
,但是因为添加样式属性是按类而不是按实例完成的,所以将它放入构造函数似乎也不正确。 / p>
答案 0 :(得分:1)
install_style_property()
不是static
;它实际上是class
方法。 valadoc.org出于某种原因显示static
;您可能不得不将此报告为错误(如果它还没有)。
class
个方法在类本身上运行 。 GObject类具有共享元数据,这些方法修改了元数据。只有在首次初始化类时才应修改此类元数据;因此,只应在该类GObjectClass.class_init()
方法中调用这些方法。在Vala中,这是static construct
方法:
public class MyClass : Gtk.Widget {
static construct {
ParamSpecDouble _the_property = new ParamSpecDouble
(
"dummy", "dummy", "dummy,
0, double.MAX, 0,
ParamFlags.READWRITE | ParamFlags.STATIC_STRINGS
);
install_style_property (_the_property);
}
}