学习使用GTK+ 3.使用GtkBuilder、界面设计器Glade和其他GTK+组件
2010-12-30 16:27
645 查看
学习使用GTK+ 3.使用GtkBuilder、界面设计器Glade和其他GTK+组件
最后的叶子学习使用GTK+
系列的第 4 篇 (本系列共6篇)
学习使用GTK+
学习使用GTK+ 0.概述
学习使用GTK+ 1.构建GTK+编译环境
学习使用GTK+ 2.GTK+“Hello World”——对GTK+运作机制的通俗介绍
学习使用GTK+ 3.使用GtkBuilder、界面设计器Glade和其他GTK+组件
学习使用GTK+ 4.GTK+常用物件及API(窗口)
学习使用GTK+ 5.GTK+常用物件及API(文本)
这一部分包括GTK+相关组件的简要介绍,和界面设计器的使用方法。如果内容存在错误,或者方法不适用与你的电脑,请在下方评论区留言给我,谢谢!
GTK+的姊妹库
准确地说,GTK+仅指一个界面物件库。为了制作GTK+,一些副产品相继诞生,比如C语言界很有名的的GLib库。这些GTK+的“姊妹库”都是GTK+所依赖的,而且,制作GTK+程序时可能需要直接使用这些库。GLib
:目前最好的C语言数据结构库之一。除数据结构外,它还包括许多常用小工具,比如多线程管理、定时器。GTK+界面无关的部分基本都被并入GLib中。
GIO
:GLib库相对独立的一部分,专门处理输入输出流。新版本的GIO还包括了网络连接功能。
GObject
:GLib库相对独立的一部分,维护一套对象系统。GTK+疯狂地使用这个系统。
ATK
:ATK提供一组查看和控制接口以方便对GTK+程序的访问。
pango
:负责处理GTK+中和字体有关的部分。
cairo
:著名的2D渲染库,被Firefox等很多程序使用。它也是目前GTK+使用的2D渲染库,通过它可以进行矢量绘图。
gdk-pixbuf
:GDK的一个部分,提供了一组位图函数,包括位图变换、位图文件读写等等。
GDK
:提供一组接口,把GTK+从桌面系统细节中隔离出来。它是一组底层函数,可以直接访问窗口细节。GTK+系统有关的部分多数在这里。
这些库的API参考都可以在GNOME参考(http://library.gnome.org/devel/references.html.zh_CN
)中找到。
还有一些库是GTK+依赖的第三方库,下面是几个重要的。
gettext
:国际化库。主要用于制作多语言程序。运行时gettext自动识别操作系统语言,然后从已有语言包中选择一个最合适用户的。
iconv
:字符集转换库。GTK+内部使用UTF-8字符集,有时需要字符集转换。
GTK+内部构成
GTK+本身只负责界面组织。它提供的函数大致可分为三类,物件(Widget)、对象(Object)和其它工具函数。工具函数提供一些与界面关系密切的实用功能,比如剪贴板读写。
对象是一些功能更加复杂的不可见元素,它们和界面息息相关,比如GtkBuilder。
界面设计器Glade
通过代码来组织界面繁琐而不直观,因而有人为GTK+做了一款界面设计器,名为Glade,现已成为GTK+最重要的辅助工具。接下来用一个计算器制作的实例来讲解GTK+界面设计器的使用方法。
打开Glade。Glade会自动新建一个文件,新建后会弹出对话框设置文件格式,应选用GtkBuilder。
首先建一个窗口。在左栏中找到“窗口”一项,点一下即可。中间部分的黑框即为窗口中的内容。
下面要组织窗口中的内容了。要注意的是,一个灰色区域只能放置一个物件。如果需要放置多个物件,可以使用水平框、垂直框或表格物件,这些容器可以把一个灰色区域分成多个。
添加Spin按钮(Spin按钮用于输入数字)、表格、按钮等物件,可以把界面画成想要的样子,在右下方的属性设置中,可以设置物件的各种属性。在“常规”选项卡中,可以设置一些重要的初始值,物件名等。注意:需要动态更改的物件,物件名很重要。
“包装”选项卡负责物件的间距控制和大小改变方式等。GTK+在窗口大小改变时会智能地调整物件大小,其依据的就是这个选项卡里的设置。
计算器的界面成形了。记得经常保存,Glade有时会比较脆弱。
注意:在输入完某项属性之后务必使输入焦点离开当前输入区,然后才可以保存文件,否则当前输入区的更改不会被立即保存到文件中。
载入界面
Glade文件的本质是个XML文件,这个文件可以用GtkBuilder对象载入并生成界面。下面这样写可以载入一个Glade文件。GtkBuilder* gtk_load_glade( gchar* filename) { GtkBuilder * gb; //新建一个GtkBuider对象 gb= gtk_builder_new( ) ; //载入文件,失败则返回NULL if ( ! gtk_builder_add_from_file( gb, filename, NULL) ) return NULL; //连接文件中包含的所有信号 gtk_builder_connect_signals( gb, NULL) ; //返回GtkBuilder对象供后面操作使用 return gb; } |
一样。用函数gtk_builder_get_object()可以获得指定名字的物件地址。为了简便,可以写一段宏代替冗长的函数调用。下面这段代码演
示了获得主窗口(名为WMain)和Spin按钮(名为SAns)地址的方法。
#define w_(builder,type,name) name=GTK_##type(gtk_builder_get_object(builder,#name)) GtkWindow * WMain; GtkSpinButton * SAns; void cal_get_widgets( GtkBuilder* gb) { w_( gb, WINDOW, WMain) ; w_( gb, SPIN_BUTTON, SAns) ; } |
void cal_widget_init( ) { gtk_widget_show_all( GTK_WIDGET( WMain) ) ; } |
编写回调函数
现在的主要任务就是编写回调函数——这些函数才是程序的主角。在某个事件被触发时,对应的函数会被执行。这个函数可以在Glade中指定。在Glade中选定某个物件,然后在右下角“信号”选项卡中选择一个合适的事件,在“操作句柄”列填入函数名。下面为窗口WMain指定destroy事件的回调函数on_WMain_destroy()。
然后编写一个函数on_WMain_destroy()。在Windows下,这个函数要加上修饰词G_MODULE_EXPORT。
G_MODULE_EXPORT void on_WMain_destroy( GtkObject* widget, gpointer user_data) { gtk_main_quit( ) ; } |
int main( int argc, char * argv[ ] ) { GtkBuilder * gb; gtk_init( & argc,& argv) ; gb= gtk_load_glade( "gtk-cal.glade" ) ; if ( gb== NULL) return - 1 ; cal_get_widgets( gb) ; cal_widget_init( ) ; gtk_main( ) ; return 0 ; } |
相关文章推荐
- Ubuntu下用glade和GTK+开发C语言界面程序(三)——学习make的使用方法
- Axure RP 6.5学习记录(5)-使用可复用组件Header和Footer设计首页
- glade使用与GTK+学习初步
- Ubuntu下用glade和GTK+开发C语言界面程序(三)——学习make的用法
- 使用libglade在GTK+中载入Glade设计的图形界面
- GTK+学习工具——使用glade:gtk-win32-devel-2.8.18-rc1.exe
- CSharp设计模式读书笔记(0):设计原则(学习难度:★★☆☆☆,使用频率:★★★★★)
- Theano与其他深度学习框架的比较,主要强调一系列低水平的设计选择,没有特别顺序。
- 使用Qt linguist进行多语言界面设计
- 微信小程序学习用demo:我厨,tab切换,界面设计(适用1230
- [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件
- PyQt5学习教程9:使用Grid Layout布局计算器界面
- WPF界面设计技巧-使用UI自动化布局
- 界面设计学习笔记
- 学习indy组件之一idhttp的使用方法
- ADF学习:Tree组件的使用
- 从今天开始学习iOS开发(iOS 7版)--实现一款App之使用设计模式
- C++学习小记(使用定义在其他.cpp文件中的变量或函数)
- WPF界面设计技巧(9)—使用UI自动化布局
- 1.窗体与界面设计-其他技术