我正在尝试使用GTK,但我发现信号文档(https://developer.gnome.org/gobject/stable/signal.html)很难理解.
似乎"信号"和"事件"之间存在差异.例如,Widget的"事件" - 信号的文档(https://developer.gnome.org/gtk3/stable/GtkWidget.html#GtkWidget-event)说
GTK +主循环将为每个传递给窗口小部件的GDK事件发出三个信号:一个generic :: event信号,另一个更具体的信号,与所传递的事件类型相匹配(例如"按键事件"),最后一个通用的"事件后"信号.
所以在我看来,GDK使用"事件",而GTK +使用"信号".也许事件只是包含在信号中,反之亦然?或者他们是完全不同的东西?
我对上述引用的理解:当按下某个键时,会触发GDK事件.此GDK事件调用窗口小部件的回调函数(不是程序员干扰).然后,回调函数依次发出三个信号::event,key-press-event并且event-after一个接一个地发出.作为程序员,我可以通过编写回调函数来拦截这些信号.如果第一个::event信号的回调返回TRUE,那么第二个key-press-event信号不会被触发,否则就是.第三个event-after信号总是被触发.
我的理解是否正确?
此外,在文档中,有时信号由双冒号(::event)前置,有时它们不是(key-press-event和event-after).有什么不同?双结肠是什么意思?
这只是命名法.
GObject中的信号只是调用命名函数列表的奇特方法; 每次实例"发出"一个信号时,GSignal机器将查看连接到该特定信号的所有回调,并按顺序调用它们,直到满足以下任一条件:
GDK或GTK +(以及任何其他基于GObject的库)发出的所有信号都以这种方式工作.
GDK中的事件是与窗口系统事件相关的结构,如按钮按下,键释放,跨越窗口边界的指针,窗口层次结构的变化等等.您通常与GDK事件的唯一交互发生在GtkWidget类型的特定信号中.作为惯例(虽然它并不总是适用)具有GdkEvent结构的信号具有-event后缀,例如button-press-event,或key-release-event,或enter-notify-event,或window-state-event.再一次,那些是GObject信号,他们唯一的专业是GdkEvent作为一个参数.
至于双冒号:信号的完整规范由声明它的类型组成,例如GtkWidget,信号名称,例如button-press-event,用双冒号分隔,例如GtkWidget::button-press-event.的::button-press-event符号仅仅是一个文档的简写,表示该扬声器被参照button-press-event信号.
| 归档时间: |
|
| 查看次数: |
1903 次 |
| 最近记录: |