GTK:通过简单方法定义应用程序类型 vs go

GTK: Define the application type vs go by simple method

在 GNOME 的某些应用程序中,如 EasyTAG,在它们的源代码中,它们具有像 G_DEFINE_TYPEet_application_get_type(来自 EasyTAG)这样的结构。他们使用 GAction 变量来表示菜单栏中 运行 的操作,例如。对于 Quit 项,他们将在可能操作的 GAction 数组中表示它。 在其他应用程序中,例如 LXTaskGManEdit,它们使用信号处理程序来调用处理请求(可能是退出)的函数。

我应该使用哪个:第一个还是第二个。

我注意到,如果您使用第一种方式,源文件将分为名为 windowapplication_windowpreferences_window 的文件,例如。第二种方法总是使用预命名的 callbacks.cinterface.c
浏览源代码时,我发现第二种方法更容易阅读,因为如果我想查找某些功能,我知道要查找哪个文件。第一种方法不太容易,因为它以 window 元素命名,而不是预设文件名。

也许第一种方法对编译器更有效...知道吗?

callbacks.c/interface.c 文件过去是从非常旧版本的 Glade 2.x 生成的,仅适用于 GTK 2.x,当时 GtkApplication 不存在.这个组织真的不用了。

推荐使用GtkApplication;有一个how-to。您会注意到那里的 C 示例没有使用 G_DEFINE_TYPE 从 GtkApplication 继承,而是使用信号处理程序。 Python 和 JS 示例确实定义了一个继承自 Gtk.Application 的 class。在 C 语言中,使用信号处理程序通常比继承更方便,但您可以使用其中任何一种。他们大多是等价的。