26.3.1 libglade函数库编程基础

26.3.1  libglade函数库编程基础

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

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

 

GladeXML 对象名;

对象名 = glade_xml_new(const char *fname,

                        const char *root,

                        const char *domain);

 

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

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

 

GtkWidget *glade_xml_get_widget(GladeXML *self,

                                const char *name);

 

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

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

 

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语言源代码文件,可以使用任意文件名。编辑该文件,写入如下代码:

 

#include <gtk-2.0/gtk/gtk.h>

#include <glib-2.0/glib.h>

#include <libglade-2.0/glade/glade.h>           // 包含libglade函数库

int main(int argc, char *argv[])

{

   gtk_init(&argc, &argv);                      // 初始化GTK+

   GladeXML *ui;                             // 声明GladeXML类型变量

   ui = glade_xml_new("ui.glade", NULL, NULL);  // 创建GladeXML对象

   GtkWidget *window;                            // 声明GtkWidget类型变量

   window = glade_xml_get_widget(ui, "MainWindow");
                                    //
GladeXML对象获得GtkWidget界面构件

   GtkWidget *label;

   label = glade_xml_get_widget(ui, "label");

   gtk_label_set_label(GTK_LABEL(label), "Hello World!");
                                                //
修改界面构件的属性

   gtk_widget_show_all(window);                 // 显示window内的所有构件

   glade_xml_signal_autoconnect(ui); // 连接GladeXML对象所有已定义信号

   gtk_main();                                  // 开始GTK+主循环

   return 0;

}

 

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值