glade3开发gtk程序入门教程.doc_第1页
glade3开发gtk程序入门教程.doc_第2页
glade3开发gtk程序入门教程.doc_第3页
glade3开发gtk程序入门教程.doc_第4页
glade3开发gtk程序入门教程.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

glade3开发gtk程序入门教程2009-11-29 01:24Gnome下已开发出了Glade这一应用软件,它是传统界面设计工具Gtk/Gdk的扩展,能满足基于Gtk+库的图形用户界面可视化开发的基本需求。一、Glade简介如果有一种软件能将图形界面的设计及时地展现于开发人员的面前,而且在设计完后能直接看到界面的外观效果,这样就使程序员的主要精力集中于应用程序核心功能的开发上,这就是所谓的可视化编程思想。在Windows环境下,这种可视化的集成开发环境已有许多成熟的产品,如VC+、VB、PB、Delphi、C+Bulider等。基于 Linux 操作系统的软件并不丰富,但绝非一片空白,例如Borland公司推出的Kylix。目前Gnome下已开发出了Glade这一应用软件,它是传统界面设 计工具Gtk/Gdk的扩展,能满足基于Gtk+库的图形用户界面可视化开发的基本需求。Glade可为你生成界面代码,基本过程如下:1.让Glade设计出界面元素,设置界面元素属性,为构件的信号设置回调函数;2.将其存为XML格式,观察并修改不符合要求的部分;3.编写应用其它部分代码,并在应用中载入Glade文件,编译C代码生成执行文件。这种模式使设计界面与其它部分代码完全分开,并且有可能做到在对界面进行改动后不必对应用进行编译。图形用户界面设计小组可不必关心应用程序的运行细 节,同时编程人员也可以把他们的时间用于其它方面,而不需为界面的修改重复编写大量烦琐的Gtk+函数。这种分工开发的形式符合软件工程的要求,对GUI 软件的开发也更方便。二、使用Glade的预备条件在学习使用Glade之前,我们假设你已对Linux操作系统的基本运用有初步了解、熟悉rpm包或gzip包的处理 命令、对C语言有一定的了解,并熟悉消息处理编程机制。以上基础是使用Glade的必备知识,如果读者在以上某些方面尚存不明之处可先查阅相关资料。为了 能更灵活地使用Glade开发应用,用户最好能熟悉gcc编译器,掌握make文件的编写规则。我们再来看看如何使Glade加入到Linux操作系统的开发环境中,主要分两步:1.获得Glade的源代码你可以在大多数Linux操作系统的发布中找到Glade的源代码,也可从网上下载,目前能方便获得源代码的网站是www.G,下载的文件可能是rpm或zip格式。2.解压、编译并安装Glade在获得源代码后,对压缩包解压缩,然后再运行make编译Glade。三、设计界面在对Glade有了初步的了解之后,让我们来看一看它的真面目吧,在Linux上先运行Xwindow,调出图形化界面后,你可以在虚拟控制台上输入Glade或在命令选单上找到开发子选单下的Glade项,点击即可。调出Glade后,我们一般能看到三个窗口(如图1):一个工程管理窗口(主窗口)、一个常用构件窗口和一个属性管理窗口。这三个窗口构成了一个GUI的开发环境,对于使用过可视化编程的用户而言,这三个窗口应是很熟悉的。工程管理窗口主要负责对一个工程项目的管理,我们所说的工程项目就是指所设计的图形界面。这个窗口中使用最多的是它的选单,常用的选单是创建新的工程项目,打开一个已有的项目文件进行编辑修改,以及改变对项目的视角等。 图1常用构件窗口则是由Glade提供的常用Gtk+构件的图形化集。在需要调用某构件时只需在这个窗口中点击该构件的图标,然后在设计好的位置单击鼠标,这时构件就被安排到适当的位置。属性窗口主要负责对项目对象的属性调整,它本身是一个分页式的notebook构件,在各页上集中了项目对象(构件)某个方面的属性,如构件的标题名称、尺寸大小、位置、停靠对齐方式、快捷键设置和信号处理等。值得一提的是有些构件是根构件,或者说是顶层容器构件(如顶层窗口构件,对话框构件等),每一个顶层容器构件都会出现在工程管理窗口的主区内,顶层容 器之间是独立的,要使它们能产生连接调度关系还需对由Glade生成的源码进行少量编辑。一个顶层构件的所有子孙构件由Glade维护在一个构件树中,我 们可以调用工程管理窗口中的“查看构件树”选单项浏览构件树。四、生成代码选项当我们设计出想要的界面后就要让Glade生成我们需要的代码,点击build按钮,Glade会弹出一个选项窗口,这个窗口中有三页,分别是普通选项、C语言选项和libGlade选项(如图2)。 图2五、Glade生成的文件Glade 生成的主要目录及代码文件有如下几个:在项目的根目录(假设为/root/projects/project1)下有三个子目录/po、/src和/macros,程序源代码都放在/src目录中,这个目录下的文件可以用文本编辑器再修改以增加应用。Glade生成的文件保存工程时当你在glade主窗口按下保存时,glade将会在工程选项中指定的目录下保存两个文件。如果没有指定任何工程名字,glade将会保存在个人目 录下面的/Projects子目录下。工程名为Project#,#是一个数字,与你所建工程数量相关。给工程/程序命名时最好避免歧义。如果命名了 工程,用你程序的名字替换下面的project#。保存时创建的两个文件是: Project1.glade Project1.gladepProject1是你选项中给出的名字,等等。这两个文件含有xml代码,glade或libglade用来调出你所创的程序。如果联编了工程,*.glade文件将会被libglade调用。如果你想在程序中调用libglade那就直接使用*.glade文件。联编工程时当按下主窗口的联编时,Glade产生用来生成程序GUI的所有文件。这些文件有时很难理解,特别是当你对Linux下编译程序了解很少的时候。下面会深入介绍它们。 在 project# 目录 o acconfig.h/autogen.sh/configure.in/Makefile.am/stamp-h.in这些文件是autoconf/autogen/automake系统所必须的,在Linux下这个系统能够自动编译并检查库依赖性。通常Glade用户只 需输入./autogen.sh来配置他们的程序以及生成所需的Makefiles文件。如果工程需要一个特定的库,这个库将会加入配置文件或生成的 Makefiles文件中。o AUTHORS/ChangeLog/README/NEWS当程序发布将会用到这些文件。它们是标准分发文件,与具体的程序相关。o macros subdirectory这个子目录保存了autoconf和autogen等系统所需的宏。一定不要把它弄乱了。o po subdirectory存有po翻译文件。如果不用gettext来使你的程序国际化,就不用管它。o src subdirectory看下面。 In the project#/src directory o main.c这个文件包含了main(), main()是所有C程序的初始化函数。只有当这个文件不存在时Glade才创建,因此你可以随意编辑。当Glade第一次生成main.c文件时,它允 许显示所有创建的窗口。如果想在程序开始时只显示一个窗口需要编辑这个文件。o support.c包含glade支持函数,不能编辑。里面最有用的函数是lookup_widget(),允许通过另一个 控件的名字查找特定控件(假定它们在一个控件树中,比如在同一个窗口里等)。o callbacks.c有glade所写的所有回调函数和信号处理器。Glade不重写这个文件,不过当需要更多的回调函数会向其中追加。Glade只写出了空的回调函数,需要你自己加入内容。o interface.c很象support.c,也不能编辑。Glade在里面写了生成GUI的函数。没有必要编辑它,如果编辑过,下次联编程序时Glade又会重写。o Makefile.am/Makefile.in/Makefile这些文件由automake/autoconf包创建,为gcc编译程序提供指导。在这里可以加入包含的库、新的资源文件等等六、运用XML指针建立构件转自:/ArticleShow/130/Article_Show_21428.htmllibGlade在程序运行时才根据XML文档 (.Glade文件)构造构件,为了应用libGlade,我们在程序的开始要对Gnome和libGlade进行初始化。初始程序如下:/ 初始化 gnome /gnome_init(phonebook, VERSION, argc, argv);/ 初始化libGlade /Glade_gnome_init();获得一个构件指针的代码如下:/ 声明指针 /GladeXML xml;GtkWidget dialog1;/ 在由Glade软件生成的XML界面文件中找到名为“about1”的根构件,生成XML构件并将构件指针赋给 xml / xml = Glade_xml_new(phonebook.Glade, about1);dialog = Glade_xml_get_widget(xml, dialog1);/ 对不用的指针要及时释放 /gtk_object_unref(GTK_OBJECT(xml);设计界面时往往有相对独立的构件,在建造应用工程时要在这些构件之间建立联系,如主窗口和对话框的父子关系等,步骤如下:1.用XML建立两个构件:dialog = Glade_xml_get_widget(xml, dialog1);app= Glade_xml_get_widget(xml, app1);2.用gnome_dialog_set_parent(GNOME_DIALOG(dialog), GTK_WINDOW(app)函数将对话框设定为app窗口的从属构件。注意:在用Glade设计界面时有一点需要注意的是所有的构件名不能重名,因为我们要以它们的名字对该构件进行访问。七、消息处理函数对于消息处理函数,我们可以在设计构件时就在构件的属性管理窗口中的signal页指明(如图3),Glade在生成的代码中自动加入函数名。如果用libGlade则有两点限制:1. 回呼函数接收的参数不能指定类型而只能用空指针类型gpointer(void); 图32. 因为libGlade是在运行时才调用回呼函数,所以这类函数不能设为 static型。八、实例代码以下是用Glade生成的一个示例程序,它是一个简单的电话薄程序,共有三个用Glade设计的独立构件,一个主窗口、一个录入对话框和一个用于展示录入内容的clist列表构件。我们可以从主窗口点击按钮弹出对话框,在对话框中有两个录入条,分别用于录入人名和电话号码,当点击对话框中的“确定”之后,人名和电话号码会加入到clist列表中,对话框关闭。有兴趣的读者可以对这个应用程序加以丰富。#include string.h#include gnome.h#include Glade/Glade.h#define VERSION 1.0static GtkWidget app;static GtkWidget clist;void do_nothing(GtkWidget w);void run_about_dialog(GtkWidget w);void add_number(GtkWidget w);void do_nothing(GtkWidget w)gnome_app_message(GNOME_APP(app), Doesnt do anything!);void run_about_dialog(GtkWidget w)GladeXML xml;xml = Glade_xml_new(phonebook.Glade, about1);if(!xml) g_warning(We could not load the interface!);return;gtk_object_unref(GTK_OBJECT(xml);static voidreally_add_number(GtkWidget w, int button, gpointer data)char strings2;GtkWidget name_entry;GtkWidget phone_entry;GladeXML xml = data;if (button != 0)return;name_entry = Glade_xml_get_widget(xml, add_name_entry);phone_entry = Glade_xml_get_widget(xml, add_phone_entry);strings0 = gtk_entry_get_text(GTK_ENTRY(name_entry);strings1 = gtk_entry_get_text(GTK_ENTRY(phone_entry);gtk_clist_append(GTK_CLIST(clist), strings);void add_number(GtkWidget w)GtkWidget dialog;GladeXML xml;xml = Glade_xml_new(phonebook.Glade, dialog1);if(!xml) g_warning(We could not load the interface!);return;dialog = Glade_xml_get_widget(xml, dialog1);gnome_dialog_set_parent(GNOME_DIALOG(dialog), GTK_WINDOW(app);gtk_signal_connect_full(GTK_OBJECT(dialog),clicked,GTK_SIGNAL_FUNC (reallyadd_number), NULL, xml,(GtkDestroyNotify)gtk_object_unref,FALSE, FALSE);int main(int argc, char argv)GladeXML xml;gnome_init(phonebook, VERSION, argc, argv);Glade_gnome_init();xml = Glade_xml_new(phonebook.Glade, app1);if(!xml) g_warning(We could not load the i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论