闲人草堂

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

第一次尝试使用gtk的时候,被无穷无尽繁杂的代码整晕了,刚刚才发现原来用glade可以如此方便的生成GUI,完全和代码剥离开,即使要修改界面,也用不着再次编译,的确很方便。

如何使用glade,网上有很多教程,我现在讲一点遇到的困难吧。

在为各种signal添加handler的时候,有两点要注意。

首先handler应该与signal的回调函数的形式完全一致,包括函数名,参数类型,参数个数,返回类型;这个可以在gtk的用户手册里查找(顺便说一句,ubuntu上的小工具devhelp很方便)。

第二点,也是困扰我很久的一点:signal和hanlder绑定的问题。

c代码中绑定signal和handler的方式有两种:

gtk_builder_connect_signals和gtk_builder_connect_signals_full。

前者是自动绑定,这个函数会使用GModule,GLib的一部分,动态加载模块来查询应用程序符号表(函数名,变量名等等),寻找应用程序中能够与Glade中指定的回调函数名相符的函数,然后连接到信号。但是 gtk_builder_connect_signals 只能工作在C下,所以如果你的编译器是g++,仅靠这样是无法binding的。我觉得这又是name mangling的问题(可恶的微软,偏要再搞一套标准,搞出这么多麻烦……),所以为了避开麻烦,可以强制以C的方式调用handler,即在hangler前加上extern "C" 就可以了,在ubuntu下g++试验通过。

后者就是手动绑定singal和hanler,我试用的时候发现不加extern “C” 也行,这两个函数的实现机制到底有何不同,有待高手指教。

posted on 2011-05-10 14:24  闲人草堂  阅读(691)  评论(0编辑  收藏  举报