使用GTK的开发者都清楚,自定义一个控件有多难,但是理解后又觉得这是常规操作。为了清楚了解GObject的工作方式,我们从GtkButon这个简单的控件进行剖析。
从Inspector剖析
写一段简单的代码:
打开Gtk Inspector(按Control-Shift-I
或Control-Shift-D
即可)
可以看到,GtkButton的子控件是GtkLabel和GtkGestureMultiPress,前者是用于文本显示,后者用于捕获鼠标动作。然后我们看一下信号槽:
可以看到GtkButton发出6个信号,连接9个信号(图中没显示)
GtkGestureMultiPress的信号也是非常重要的,这里有6个信号连接的。当然GtkLabel的信号也需要关注。
从层次信息获知,GtkButton是继承于GtkBin的
到这里似乎就没什么好看的了,接着到了激动人心的时刻啦~
从源码剖析
在整个gtk源码中抽取幸运儿gtkbutton出来阅读,这么长的代码看得赏(sang)心(xin)悦(bing)目(kuang)。
gtkbutton.h
G_BEGIN_DECLS和G_END_DECLS是一对的,他们的定义是:
1 |
嗯,就是为了兼容C++准备的 。接着一堆#define,我们一一细看。
其实最近也没在搞GTK了
先鸽一下吧,到搞GTK的时候再更新…
参考: