在 C 中使用“GtkWidget *window”与“GObject *window”
Using " GtkWidget *window " vs " GObject *window " in C
使用 GTK+ 3(和 glade)从 xml glade 文件创建简单的 window 时,正确的语法是什么?我见过两种似乎做同样事情的方法,但语法略有不同。
示例 1:
#include <gtk/gtk.h>
int
main (int argc, char *argv[])
{
GtkBuilder *builder;
GObject *window;
gtk_init (&argc, &argv);
builder = gtk_builder_new ();
gtk_builder_add_from_file (builder, "builder.glade", NULL);
window = gtk_builder_get_object (builder, "window");
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_main ();
return 0;
}
示例 2:
#include <gtk/gtk.h>
void
on_window_destroy (GtkWidget *object, gpointer user_data)
{
gtk_main_quit ();
}
int
main (int argc, char *argv[])
{
GtkBuilder *builder;
GtkWidget *window;
gtk_init (&argc, &argv);
builder = gtk_builder_new ();
gtk_builder_add_from_file (builder, "builder.glade", NULL);
window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
gtk_builder_connect_signals (builder, NULL);
g_object_unref (G_OBJECT (builder));
gtk_widget_show (window);
gtk_main ();
return 0;
}
两者都应该可以,但我认为使用 GtkWidget
更合理,因为您将更多地需要这种类型,所以您不需要一直写 GTK_WIDGET(obj)
。您只需要 'convert' 一次。
请注意,官方指南使用GObject
类型。 (here)
但毕竟你可以决定,因为你可以很容易地'convert'它到你需要的类型...
使用 GTK+ 3(和 glade)从 xml glade 文件创建简单的 window 时,正确的语法是什么?我见过两种似乎做同样事情的方法,但语法略有不同。
示例 1:
#include <gtk/gtk.h>
int
main (int argc, char *argv[])
{
GtkBuilder *builder;
GObject *window;
gtk_init (&argc, &argv);
builder = gtk_builder_new ();
gtk_builder_add_from_file (builder, "builder.glade", NULL);
window = gtk_builder_get_object (builder, "window");
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_main ();
return 0;
}
示例 2:
#include <gtk/gtk.h>
void
on_window_destroy (GtkWidget *object, gpointer user_data)
{
gtk_main_quit ();
}
int
main (int argc, char *argv[])
{
GtkBuilder *builder;
GtkWidget *window;
gtk_init (&argc, &argv);
builder = gtk_builder_new ();
gtk_builder_add_from_file (builder, "builder.glade", NULL);
window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
gtk_builder_connect_signals (builder, NULL);
g_object_unref (G_OBJECT (builder));
gtk_widget_show (window);
gtk_main ();
return 0;
}
两者都应该可以,但我认为使用 GtkWidget
更合理,因为您将更多地需要这种类型,所以您不需要一直写 GTK_WIDGET(obj)
。您只需要 'convert' 一次。
请注意,官方指南使用GObject
类型。 (here)
但毕竟你可以决定,因为你可以很容易地'convert'它到你需要的类型...