GTK:通过简单方法定义应用程序类型 vs go
GTK: Define the application type vs go by simple method
在 GNOME 的某些应用程序中,如 EasyTAG
,在它们的源代码中,它们具有像 G_DEFINE_TYPE
和 et_application_get_type
(来自 EasyTAG
)这样的结构。他们使用 GAction
变量来表示菜单栏中 运行 的操作,例如。对于 Quit
项,他们将在可能操作的 GAction 数组中表示它。
在其他应用程序中,例如 LXTask
、GManEdit
,它们使用信号处理程序来调用处理请求(可能是退出)的函数。
我应该使用哪个:第一个还是第二个。
我注意到,如果您使用第一种方式,源文件将分为名为 window
、application_window
、preferences_window
的文件,例如。第二种方法总是使用预命名的 callbacks.c
、interface.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 语言中,使用信号处理程序通常比继承更方便,但您可以使用其中任何一种。他们大多是等价的。
在 GNOME 的某些应用程序中,如 EasyTAG
,在它们的源代码中,它们具有像 G_DEFINE_TYPE
和 et_application_get_type
(来自 EasyTAG
)这样的结构。他们使用 GAction
变量来表示菜单栏中 运行 的操作,例如。对于 Quit
项,他们将在可能操作的 GAction 数组中表示它。
在其他应用程序中,例如 LXTask
、GManEdit
,它们使用信号处理程序来调用处理请求(可能是退出)的函数。
我应该使用哪个:第一个还是第二个。
我注意到,如果您使用第一种方式,源文件将分为名为 window
、application_window
、preferences_window
的文件,例如。第二种方法总是使用预命名的 callbacks.c
、interface.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 语言中,使用信号处理程序通常比继承更方便,但您可以使用其中任何一种。他们大多是等价的。