GTK简介 - 层次、信号、事件
2012-01-06 10:21
211 查看
下面的内容是初学GTK时给同学做的一个介绍内容,更为详细的可以参考:http://apps.hi.baidu.com/share/detail/19271271
要弄懂GTK,我们先从GTK的层次下手,先是几个概念:
XWindow系统
GDK
GLib
GTK+
XWindow系统:
X Window,即X Windows图形用户接口,它并不是一个软件,而是一个协议;
在最底层,X包括一种存在与客户端和服务器间的协议。X服务器是响应客户端请求并向用户提供可交互桌面的软件。
客户端可以发送请求来创建窗口,绘制文本和图形,这些窗口、文本和图形都会显示在服务器上;
一旦用户移动鼠标、按下按键或者单击鼠标,X服务器就会向客户端发送事件通知客户端;
客户就是通过Xlib提供的API向X服务器发送请求,并从X服务器那里接受错误消息和事件;
客户端和X服务器可以存在于一台计算机上,也可以在网络上的不同计算机上运行;
GDK:
GDK是标准Xlib函数调用的一个基本封装(wrapper);
Glib:
提供了一系列封装的函数和定义,以及对一些C标准库函数的封装,用于对上层绘图等的支持。
GTK+:
一个小型而高效的控件库,包含GTK与GDK层,GTK层封装了大量的Widget及相关操作,GDK层则如上所述,是对Xlib的封装。
下面介绍一下GTK的信号与回调函数原理,并从中解析GTK是如何工作的:
GTK是一个事件驱动的工具包,意味着它会等在gtk_main()那里,直到下一个事件发生,才把控制权传给适当的函数。
控制权的传递是使用“信号”的办法来完成的。当一个事件发生时,如按一下鼠标键,所按的构件会“发出”适当的信号。这就是GTK的工作机制。
有所有构件都继承的信号,如"destroy",有构件专有的信号,如开关(toggle)按钮发出的"toggled"信号。
上面提到了两个概念:事件与信号,无论在MFC,或者GTK中,这两个概念都有类似的区别,在GTK中:
“信号(Signals)和事件(events)有关是因为GTK控件 (GtkWidget)通常收到一个事件的时候发出一个信号。
事件驱动着Gtk的主循环,”等待事件,然后处理它”。GTK 是一个事件驱动的工具包,意味着它会等在gtk_main() 那里,直到下一个事件发生,
才把控制权传给适当的函数。
信号只是保持了一个回调函数列表,然后调用回调函数(就是发出信号)。这样的作用是:控制权的传递是使用“信号”的办法来完成的。
说到这里,对于GTK的整体层次结构及工作原理,大家都应该有了一个简单的了解,具体工程应用,可以参考我上传的一份帮助文档,相信会有帮助:
http://download.csdn.net/detail/crazyingbird/4002710
要弄懂GTK,我们先从GTK的层次下手,先是几个概念:
XWindow系统
GDK
GLib
GTK+
XWindow系统:
X Window,即X Windows图形用户接口,它并不是一个软件,而是一个协议;
在最底层,X包括一种存在与客户端和服务器间的协议。X服务器是响应客户端请求并向用户提供可交互桌面的软件。
客户端可以发送请求来创建窗口,绘制文本和图形,这些窗口、文本和图形都会显示在服务器上;
一旦用户移动鼠标、按下按键或者单击鼠标,X服务器就会向客户端发送事件通知客户端;
客户就是通过Xlib提供的API向X服务器发送请求,并从X服务器那里接受错误消息和事件;
客户端和X服务器可以存在于一台计算机上,也可以在网络上的不同计算机上运行;
GDK:
GDK是标准Xlib函数调用的一个基本封装(wrapper);
Glib:
提供了一系列封装的函数和定义,以及对一些C标准库函数的封装,用于对上层绘图等的支持。
GTK+:
一个小型而高效的控件库,包含GTK与GDK层,GTK层封装了大量的Widget及相关操作,GDK层则如上所述,是对Xlib的封装。
下面介绍一下GTK的信号与回调函数原理,并从中解析GTK是如何工作的:
GTK是一个事件驱动的工具包,意味着它会等在gtk_main()那里,直到下一个事件发生,才把控制权传给适当的函数。
控制权的传递是使用“信号”的办法来完成的。当一个事件发生时,如按一下鼠标键,所按的构件会“发出”适当的信号。这就是GTK的工作机制。
有所有构件都继承的信号,如"destroy",有构件专有的信号,如开关(toggle)按钮发出的"toggled"信号。
上面提到了两个概念:事件与信号,无论在MFC,或者GTK中,这两个概念都有类似的区别,在GTK中:
“信号(Signals)和事件(events)有关是因为GTK控件 (GtkWidget)通常收到一个事件的时候发出一个信号。
事件驱动着Gtk的主循环,”等待事件,然后处理它”。GTK 是一个事件驱动的工具包,意味着它会等在gtk_main() 那里,直到下一个事件发生,
才把控制权传给适当的函数。
信号只是保持了一个回调函数列表,然后调用回调函数(就是发出信号)。这样的作用是:控制权的传递是使用“信号”的办法来完成的。
说到这里,对于GTK的整体层次结构及工作原理,大家都应该有了一个简单的了解,具体工程应用,可以参考我上传的一份帮助文档,相信会有帮助:
http://download.csdn.net/detail/crazyingbird/4002710
相关文章推荐
- GTK学习[一]:GTK中的信号(Signal)与事件
- gtk 事件信号,和回调
- *Delphi多线程编程--线程同步的方法(事件、互斥、信号、计时器)简介
- Gtk事件与信号关系
- 双线程--改变事件信号有无,协调工作
- Qt Quick 事件处理之信号与槽
- JavaScript事件冒泡简介及应用
- Android Accessibility使用及事件流程简介
- JavaScript事件冒泡简介及应用
- GTK编程:button控件与消息事件
- WPF鼠标事件简介
- 局部QEventLoop帮助QWidget不消失(也就是有一个局部事件循环始终在运行,导致程序被卡住那里,但仍可以接受事件。说白了就是有一个while语句死活不肯退出,直到收到退出信号)
- 容器构件 Container Widgets 事件盒 The EventBox@GTK+ 2.0 中文教程连载
- DOM事件简介
- JavaScript事件冒泡简介及应用
- [转]鼠标事件简介
- vxworks中任务间的通信支持信号量、消息队列、管道、信号、事件、共享内存等
- GTK-DirectFB接收键盘事件全过程
- JavaScript事件冒泡简介及应用
- PyQt5:事件与信号(16)