设为首页 加入收藏

TOP

26.3.1 libglade函数库编程基础
2013-10-12 06:56:01 来源: 作者: 【 】 浏览:95
Tags:26.3.1 libglade 函数 编程 基础

26.3  C语言代码联编

Glade的项目文件是一个单独的".glade"文件,可通过libglade库将该项目文件添加到C语言源代码中。这样,就能在C语言编程写的程序中直接使用Glade设计的用户界面。本节将介绍libglade库的使用方法。

26.3.1  libglade函数库编程基础

通过libglade函数库连接Glade项目文件至少包含两个步骤,这些工作必须在GTK+库初始化后,且没有进入GTK+主循环时完成。步骤如下:

(1)创建GladeXML对象。GladeXML对象是用于动态加载XML格式用户界面的类型,可使用glade_xml_new()函数创建。它的一般形式为:

  1. GladeXML 对象名;  
  2. 对象名 = glade_xml_new(const char *fname,  
  3.                         const char *root,  
  4.                         const char *domain); 

其中,fname参数为Glade项目文件的路径和名称。root参数为项目文件中顶层构件节点,NULL表示使用Glade项目文件中定义的所有构件。如果希望GladeXML对象只代表一个窗体构件和窗体内的子构件,那么root参数可设置为该窗体构件在Glade项目中定义的名称。domain参数为翻译文件的名称,NULL为默认。

(2)获得界面构件。可从有效的GladeXML对象中获得界面构件,然后对其进行操作。至少要获得顶层窗体构件,然后使用GTK+函数将其显示出来。glade_xml_get_widget()函数用于获得界面构件,它的一般形式为:

  1. GtkWidget *glade_xml_get_widget(GladeXML *self,  
  2.                                 const char *name); 

self参数为GladeXML对象的名称,name参数为Glade项目中界面构件的名称。函数返回值是GtkWidget对象。

(3)连接信号。在Glade中定义了信号后,可使用glade_xml_signal_autoconnect()函数将这些信号全部连接到C语言代码中。它的一般形式为:

  1. void glade_xml_signal_autoconnect(GladeXML *self); 

下面用一个例子说明libglade函数库的基本操作方法,首先在Glade里创建一个名为ui.glade的项目文件。然后在项目文件中添加一个窗体构件,并在其中装入一个纵向组装盒、一个标签构件和一个按钮构件。将窗体命名为MainWindow,标签命名为label。在"公共"选项卡内将按钮的"编辑类型"属性设为"库存",将"库存按钮"属性设为"退出(Q)",如图26.43所示。

 
(点击查看大图)图26.43  一个简单的Glade项目
然后为窗体构件连接信号。选择窗体,单击"信号"选项卡。找到信号列表中GtkWidget项,单击左侧展开器,展开GtkWidget类中定义的信号。选择delete-event信号,为其添加回调函数gtk_main_quit,如图26.44所示。
 
(点击查看大图)图26.44  为窗体连接信号

选择按钮构件,选择"信号"选项卡。找到信号列表中GtkButton项,单击左侧展开器,展开GtkWidget类中定义的信号。选择clicked信号,为其添加回调函数gtk_main_quit。保存Glade项目文件。

在上述Glade项目文件同一个目录中建立一个C语言源代码文件,可以使用任意文件名。编辑该文件,写入如下代码:

  1. #include <gtk-2.0/gtk/gtk.h> 
  2. #include <glib-2.0/glib.h> 
  3. #include <libglade-2.0/glade/glade.h>           // 包含libglade函数库  
  4. int main(int argc, char *argv[])  
  5. {  
  6.    gtk_init(&argc, &argv);                      // 初始化GTK+库  
  7.    GladeXML *ui;                                // 声明GladeXML类型变量  
  8.    ui = glade_xml_new("ui.glade", NULL, NULL);  // 创建GladeXML对象  
  9.    GtkWidget *window;                           // 声明GtkWidget类型变量  
  10.    window = glade_xml_get_widget(ui, "MainWindow");  
  11.                                     // 从GladeXML对象获得GtkWidget界面构件  
  12.    GtkWidget *label;  
  13.    label = glade_xml_get_widget(ui, "label");  
  14.    gtk_label_set_label(GTK_LABEL(label), "Hello World!");  
  15.                                                 // 修改界面构件的属性  
  16.    gtk_widget_show_all(window);                 // 显示window内的所有构件  
  17.    glade_xml_signal_autoconnect(ui);    // 连接GladeXML对象所有已定义信号  
  18.    gtk_main();                                  // 开始GTK+主循环  
  19.    return 0;  

在编译参数中加入编译参数"`pkg-config --cflags --libs glib-2.0 gtk+-2.0 libglade-2.0`",编译该程序。编译成功后运行程序,如图26.45所示。

 
(点击查看大图)图26.45  libglade演示

程序中使用glade_xml_new()函数读取Glade项目文件ui.glade,创建了一个GladeXML对象。然后通过glade_xml_get_widget()函数获得了Glade项目中的window和label构件。程序运行时,修改了标签label的字符串,并使用gtk_widget_show_ all()函数将窗体构件window内的所有构件显示出来。

Glade项目中为window和button构件所连接的信号在执行glade_xml_signal_auto- connect()函数后即可被程序所使用。所以单击窗体的关闭按钮,或者按下"退出"按钮时,将调用gtk_main_quit()函数结束程序。

注意:通过C语言源代码文件编译的可执行文件与Glade项目文件是分离的,如果删除了Glade项目文件或改变其路径,那么可执行文件也无法启动图形界面,并且造成执行错误。如果在Glade中修改了项目文件,只要不影响可执行文件的调用,那么无需重新修改和编译源代码。例如在Glade中只该变了窗体构件的标题属性,再次运行可执行文件时,将显示新修改的窗体标题。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇18.4.1 查询主机名称 下一篇4.3.2 TCSH和C Shell环境变量

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: