GtkApplication 和 gtk_init 有什么区别?
What's the difference between GtkApplication and gtk_init?
我现在正在学习在 Linux 中使用 GTK+3.0 和 C。阅读一些教程和示例代码后,我对如何初始化应用程序有一些疑问。
这是我看到的两个版本的代码。
#include <gtk/gtk.h>
static void
activate (GtkApplication* app,
gpointer user_data)
{
GtkWidget *window;
window = gtk_application_window_new (app);
gtk_window_set_title (GTK_WINDOW (window), "Window");
gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
gtk_widget_show_all (window);
}
int
main (int argc,
char **argv)
{
GtkApplication *app;
int status;
app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return status;
}
此代码使用 gtk_application_new()
初始化 GtkApplication
并使用 g_application_run()
启动它。
这是第二个
#include <gtk/gtk.h>
int main(int argc,char *argv[])
{
GtkWidget *window;
gtk_init(&argc,&argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window),"helloworld");
gtk_widget_show(window);
gtk_main();
return 0;
}
此代码使用 gtk_init()
初始化应用程序并 gtk_main()
到 运行 它。
但是,我无法弄清楚它们之间的区别,因为 运行ning 结果似乎是一样的。
gtk_init()
函数初始化库使用的内部变量,g_application_new()
在内部调用gtk_init()
,所以没有区别或相似,它们有不同的用途,只是其中一个,包括另一个。
我不是通过阅读文档或类似的东西知道这一点的,这只是一个合乎逻辑的结论。
创建 GtkApplication
可能是为了避免在 Gtk+ 库中使用全局变量,而现在您可以使用 GtkApplication
来保存应用程序范围的变量。
看来是正确的做法,我个人很喜欢,但是好久没写Gtk+的应用了,而且是2版的,所以不是很了解.
Gtk+ 有一个很棒的特性,就是它有很好的文档记录,只需 google for GtkApplication
你就会更好地理解它的用途以及应该如何使用它。
看看GtkApplication documentation。
Class GtkApplication
处理初始化、应用程序的生命周期、主要 windows、全局资源等。如果你不想使用它,一切都很好,但如果你需要它们,你将不得不手动完成所有这些事情。
这包括 Gtk 的初始化:调用 gtk_init()
。
GtkApplication
引入动作支持,您可以使用动作来解耦可操作项(如菜单、按钮等)和相应的回调。
- 您可以使用
g_application_send_notification
来显示通知,并替换已弃用的 GtkStatusIcon
。
- 您可以使用命令行在现有应用程序中打开文件:https://developer.gnome.org/gio/stable/GApplication.html#GApplication-open
我现在正在学习在 Linux 中使用 GTK+3.0 和 C。阅读一些教程和示例代码后,我对如何初始化应用程序有一些疑问。
这是我看到的两个版本的代码。
#include <gtk/gtk.h>
static void
activate (GtkApplication* app,
gpointer user_data)
{
GtkWidget *window;
window = gtk_application_window_new (app);
gtk_window_set_title (GTK_WINDOW (window), "Window");
gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
gtk_widget_show_all (window);
}
int
main (int argc,
char **argv)
{
GtkApplication *app;
int status;
app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return status;
}
此代码使用 gtk_application_new()
初始化 GtkApplication
并使用 g_application_run()
启动它。
这是第二个
#include <gtk/gtk.h>
int main(int argc,char *argv[])
{
GtkWidget *window;
gtk_init(&argc,&argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window),"helloworld");
gtk_widget_show(window);
gtk_main();
return 0;
}
此代码使用 gtk_init()
初始化应用程序并 gtk_main()
到 运行 它。
但是,我无法弄清楚它们之间的区别,因为 运行ning 结果似乎是一样的。
gtk_init()
函数初始化库使用的内部变量,g_application_new()
在内部调用gtk_init()
,所以没有区别或相似,它们有不同的用途,只是其中一个,包括另一个。
我不是通过阅读文档或类似的东西知道这一点的,这只是一个合乎逻辑的结论。
创建 GtkApplication
可能是为了避免在 Gtk+ 库中使用全局变量,而现在您可以使用 GtkApplication
来保存应用程序范围的变量。
看来是正确的做法,我个人很喜欢,但是好久没写Gtk+的应用了,而且是2版的,所以不是很了解.
Gtk+ 有一个很棒的特性,就是它有很好的文档记录,只需 google for GtkApplication
你就会更好地理解它的用途以及应该如何使用它。
看看GtkApplication documentation。
Class GtkApplication
处理初始化、应用程序的生命周期、主要 windows、全局资源等。如果你不想使用它,一切都很好,但如果你需要它们,你将不得不手动完成所有这些事情。
这包括 Gtk 的初始化:调用 gtk_init()
。
GtkApplication
引入动作支持,您可以使用动作来解耦可操作项(如菜单、按钮等)和相应的回调。- 您可以使用
g_application_send_notification
来显示通知,并替换已弃用的GtkStatusIcon
。 - 您可以使用命令行在现有应用程序中打开文件:https://developer.gnome.org/gio/stable/GApplication.html#GApplication-open