Gtk事件与信号关系
--分析中相关的源码包 gtk+2.0-2.12.9
Gtk所提供的工具库与Gtk应用程序与都是基于事件触发机制来管理。所有的Gtk应用程序都是基于事件驱动,如果没有事件发生,应用程序将处于等待状态,不会执行任何操作,一旦事件发生,将根据不同的事件做出相应的处理。在GTK+中,一个事件就是从X Server传出来的一个信息。当一个事件发生时,Gtk程序就会通过发送一个信号来通知应用程序执行相关的操作,即调用指定控件与这一信号进行绑定的回调函数,来完成一次由事件所触发的行动。
一、通过对源代码分析,解决理解过程中所产生的问题:
1、Gtk应用程序如何能接收到来至XServer端的事件:
根据以前的分析可知,GDK层所提供的事件循环对XServer端传过来的事件进行管理,并将其转化为GDK层的事件,通过对具体源代码的分析,可以知道Gtk应用程序能接收的事件,便是来自GDK层进行加工过的Gdk事件。
在程序中可以得知,当有事件需要处理时,Gdk层对XServer端的事件以队列的形式进行管理(_gdk_events_queue),并将X事件通过(gdk_event_translate)转换为GDK事件,将转换后的事件放入队列中,每次从队列中取出队首的事件(_gdk_event_unqueue),如果事件不为空,这时程序中的处理是将GDK事件GdkEvent交给了_gdk_event_func函数进行处理,到这我们可以知道,由XServer端产生的事件经过GDK层后将事件由一个函数_gdk_event_func来处理。
进一步分析知道ÿ
Gtk事件与信号关系
最新推荐文章于 2021-05-01 02:16:21 发布
本文详细分析了Gtk应用程序如何接收和处理XServer事件,以及Gtk事件与信号的关系。通过GDK事件循环,事件被转化为GDK事件并传递给_gdk_event_func处理。Gtk使用信号机制,将事件转化为信号,例如GtkButton的点击事件,触发"PRESSED"、"RELEASED"和"CLICKED"信号,执行相应回调函数。文章以GtkButton为例,深入探讨了事件转化为信号的流程。
摘要由CSDN通过智能技术生成