我正在使用GTK + 3.0库使用C GUI。我正在使用工具Glade我想知道在Glade中制作GUI之后实际上" c"文件为该GUI生成。
答案 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>