G_DEFINE_TYPE在GTK中意味着什么?

时间:2017-12-10 16:35:19

标签: c gtk

我试图了解这个基本GTK计划的基础知识。我无法弄清楚G_DEFINE_TYPE的工作原理。它看起来类似于C`

中的函数声明
struct _LearnWindow
{
  GtkApplicationWindow  parent_instance;

  /* Template widgets */
  GtkHeaderBar        *header_bar;
  GtkLabel            *label;
};

G_DEFINE_TYPE (LearnWindow, learn_window, GTK_TYPE_APPLICATION_WINDOW)

static void
learn_window_class_init (LearnWindowClass *klass)
{
  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);

  gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Learn/learn-window.ui");
  gtk_widget_class_bind_template_child (widget_class, LearnWindow, header_bar);
  gtk_widget_class_bind_template_child (widget_class, LearnWindow, label);
}

static void
learn_window_init (LearnWindow *self)
{
  gtk_widget_init_template (GTK_WIDGET (self));
}

1 个答案:

答案 0 :(得分:1)

根据documentation

#define G_DEFINE_TYPE(TN, t_n, T_P) G_DEFINE_TYPE_EXTENDED (TN, t_n, T_P, 0, {})
  

类型实现的便捷宏,它声明了一个类初始化函数,一个实例初始化函数(有关这些函数的信息,请参阅GTypeInfo)和一个指向父类的名为t_n_parent_class的静态变量。此外,它定义了一个* _get_type()函数。