是否可以在不使用 GObject 样式构造的情况下扩展基本 Gtk 小部件?



我是如何从上一个问题中发现的,GObject样式构造对于 vala 类定义不是必需的。但是许多 gtk 应用程序在扩展基本小部件时使用这种方式。例如,elementary os 应用中心为Gtk.ApplicationWindow类执行此操作。

所以我的问题是,我可以在不使用Object()构造的情况下扩展任何基Gtk类吗?

通常你会像这样调用基构造函数:

public class MainWindow : Gtk.ApplicationWindow {
public MainWindow (Gtk.Application application) {
base (application);
}
}

这不适用于本身使用 GObject 样式构造参数的类。

正如您已经发现的那样,从此类派生的正确方法是:

public class MainWindow : Gtk.ApplicationWindow {
public MainWindow (Gtk.Application application) {
Object (application: application);
}
}

这并没有太大的不同,除了您必须指定每个属性的名称并使用Object类(在 C 中是 GObject(而不是指定base

PS:在我回答你的另一个问题(GObject风格构造如何工作?(我的意思是,当你编写自己的类时,你不需要使用GObject风格的构造,其他人可以从中派生。在这里,Gtk.MainWindow的设计迫使你在派生类中使用GObject风格的构造。

相关内容

最新更新