glad 3 结合GTK的用法

       GTK 是完全按照面向对象思想设计的一套组件,如果你用过javaSwing 那就应该会很容易的理解这个东西。按我现在的水平,我只当GTK 就是些图形组件。Glade 是可以让你用拖拽的方式来给GTK 这些组件进行布局的,用过Netbeans 进行Swing 设计的应该会明白,当然如果你用过垃圾 的VCABitNo 坚决讨厌这些东西)什么的也会明白。不过不明白也没关系,下面就一切从0 开始讲解。

现在ABitNo 假设读者会用cgccmake 。不过不会的话还是没有关系,下面会把每一步需要的命令都列出来。


1
、准备开发环境
Linux
GTK+-2 Glade 3.6 gcc make Glib2
由于这些都不是重点,所以就不详细介绍了。另外非常推荐安装DevhelpLinux 下软件开发会经常用到的。

2 、认识Glade
当你打开Glade3 时,会出现一个Unsaved 1 的对话框,这个是让你选择现在这个Project 的一些基本属性。这里就按照默认的,不要修改,因为主要是设置基于gtk版本多少,或者是gnome版本多少来进行的。一般都是基于当前最新的或者glade能够支持到的最高gnome版本来进行的,所以没有必要修改。我们来认识下 你看到的Glade 窗口,最上面是菜单栏,菜单栏下面的是工具栏;左边那列叫Palette ,你所需要的组件都在那里了;中间那个最大的白色空间是你的工作区;右边上部的白色部分叫Inspector ,是你添加的组件的一个导航列表;右边下部是Properties ,当你点击了某个组件后,在这里会出现它的属性,你可以对它们进行编辑。

3 、设计界面
这个应该就不困难了,就是点击Palette 里的组件,然后摆放位置,调节属性。如果你不明白应该如何去做,那就按照我给出的这个小示例来一步步走。

  • Palette 里点击Toplevels 下的window 组件,这时在中间的空白工作区会出现一个深色方框,这个就是你程序的主窗口。

  • Inspector 里,用鼠标选中你刚新建的那个窗口,在下面的Properties 里进行如下编辑:

    • General 标签下,将Name 属性改为window ,将Window Title 改为ABitNo

    • Signals 标签下,你可以在GtkWidget 那一类中找到个delete-event ,为它的Handler 选择gtk_main_quit ,同样给GtkObject 那一类中唯一的destroy 选择gtk_main_quit

  • Palette 里点击Container 下的Fixed ,在你上一步新建的window 中点击,这样就创建好了一个容器,然后按照给window 修改名字的方法将其改名为fixed 。容器就是一个可以存放其他组件并进行布局的一种组件

  • Palette 里点击Control and Display 下的Label ,在Fixed 容器上点击,这样你就把label 放到了Fixed 容器里了,在PropertiesGeneral 标签下 将Name 属性改为label ,将Label 属性里的内容都删除。最后你可以点击工具栏上的那个Drag Resize 按钮,然后你就可以选中label 进行拖拽,来摆放出一个合适的位置,位置不会影响程序的功能,但是会影响美观。

  • Palette 里点击Control and Display 下的Button ,在Fixed 容器上点击,这样你就在Fixed 容器里又放置了一个按钮,将其Name 属性改为buttonLabel 属性改为ABitNo ,同样的你可以通过拖拽来调节它的大小和位置

这样我们的界面就设置完成了,保存为abitno.glade 。最后的设计和Inspector 里的内容会像下面这样
window-fixed-button-label-inspector

4 、编写代码
这一步才是关键,界面设计是次要的,Glade 就是把界面与代码分开,这样更便于维护。先不多说了,直接看代码,代码里都已经把注释写的很详细了,如果仍然有不明白的可以提出来。
你现在要做的就是打开一个编辑器,如gedit ,在abitno.glade 所在的文件夹里编辑一个文件abitno.c ,内容如下

/*
* File :abitno.c
* Author: ABitNo
* Email: wolfplanet@gmail.com
* Website: ABitNo.LinPie.com
*/

 
/***********************************************************************
* 这句include就是简单的包含gtk的头文件 *
***********************************************************************/

#include <gtk/gtk.h>
 
/***********************************************************************
* 从名字就可以看出这是一个button被点击时要执行的函数 *
***********************************************************************/

void on_button_clicked( GtkWidget * widget, gpointer label)
{
/*这是gtk的一个函数,用来给Label设定文字*/
gtk_label_set_text( GTK_LABEL( label) , "I Love ABitNo.LinPie.com" ) ;
}
 
int main( int argc, char * argv[ ] )
{
/*这些語句声明了一些组件变量,由于GTK是面向对象的,
所以都可以声明为GtkWidget,这也是习惯作法 */

GtkBuilder * builder;
GtkWidget * window;
GtkWidget * button;
GtkWidget * label;
 
/*每一个gtk程序都会用到这一句,用来初始化*/
gtk_init( & argc, & argv) ;
 
/*这个builder就是用来读取我们用Glade设计的界面的一个东西*/
builder = gtk_builder_new( ) ;
 
/*用下面这个gtk函数把abitno.glade的内容给builder*/
gtk_builder_add_from_file( builder, "abitno.glade" , NULL) ;
 
/*通过名字从abitno.glade中读取我们需要使用的组件*/
window = GTK_WIDGET( gtk_builder_get_object( builder, "window" ) ) ;
button= GTK_WIDGET( gtk_builder_get_object( builder, "button" ) ) ;
label= GTK_WIDGET( gtk_builder_get_object( builder, "label" ) ) ;
 
/*这是glib里的一个函数,用来把一个组件与一个函数关联起来,下面
这句就是把button和我们上面的那个on_button_clicked给关联了*/

g_signal_connect( G_OBJECT( button) , "clicked" ,
G_CALLBACK( on_button_clicked) , ( gpointer) label) ;
 
/*这条語句就是自动把所有人信号处理函数都关联好*/
gtk_builder_connect_signals( builder, NULL) ;
 
/*因为我们已经不需要builder了,就释放builder的空间*/
g_object_unref( G_OBJECT( builder) ) ;
 
/*将window内所有的组件都显示出来,这们我们才能看见*/
gtk_widget_show_all( window) ;
 
/*这也是每一个gtk程序都要有的*/
gtk_main( ) ;
 
return 0 ;
}

5 、编译运行
当你的代码都写完了,那就保存,准备编译了,用下面的命令
gcc -o abitno abitno.c `pkg-config --cflags --libs gtk+-2.0` -export-dynamic
要注意,pkg-config 前后的那个不是单引号,而是ESC 下面那个键。

然后通过下面的命令来运行
./abitno

如果一切顺利的话,就会出现一个窗口,上面只显示一个ABitNo 按钮,你点击它就会出现一句话“I Love ABitNo.LinPie.com“ ,如下图
abitno-gtk-demo

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值