我想知道在Glade中制作GUI后实际上" c"文件生成?

时间:2017-02-16 09:51:45

标签: gtk gtk3 glade

我正在使用GTK + 3.0库使用C GUI。我正在使用工具Glade我想知道在Glade中制作GUI之后实际上" c"文件为该GUI生成。

1 个答案:

答案 0 :(得分:2)

Glade-3不会生成可以编译的.c文件。它生成一个.glade(.ui),它是一个XML文件,用于描述小部件的布局和要连接的信号。您在运行时将此文件加载到程序中以创建窗口小部件。很老的版本确实生成了.c文件但是很久以前。

在应用程序中使用Glade文件需要使用的大多数函数都基于GtkBuilder和以gtk_builder _ *()开头的函数。 API文档位于https://developer.gnome.org/gtk3/stable/GtkBuilder.html

示例test.c程序: -

#include <gtk/gtk.h>

#define UI_FILE "test.ui"
#define WIDGET_WINDOW "a_window"

/* Callback for the buttons */
void on_button_clicked (GtkButton* button,
                        gpointer user_data)
{
  gtk_main_quit();
}

int main(int argc, char *argv[])
{
  GtkWidget *window;
  GtkBuilder *builder;

  /* Initialize gtk+*/
  gtk_init (&argc, &argv);

  builder = gtk_builder_new ();
  gtk_builder_add_from_file (builder, UI_FILE, NULL);

  window = GTK_WIDGET (gtk_builder_get_object (builder, WIDGET_WINDOW));
  gtk_builder_connect_signals (builder, NULL);

  gtk_widget_show (window);

  gtk_main ();
  return 0;
}

其对应的Glade文件test.ui

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.0 -->
<interface>
  <requires lib="gtk+" version="3.20"/>
  <object class="GtkWindow" id="a_window">
    <property name="can_focus">False</property>
    <child>
      <object class="GtkBox">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="orientation">vertical</property>
        <child>
          <object class="GtkLabel">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="vexpand">True</property>
            <property name="label" translatable="yes">label</property>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkButton">
            <property name="label" translatable="yes">Close</property>
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="receives_default">True</property>
            <signal name="clicked" handler="on_button_clicked" swapped="no"/>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">1</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>