本节将学习 GObject 的 signal(信号)
同系列传送门: rust-gui
GNOME入坑指南: gnome
本节难度较小, 如果你已经掌握了之前的属性一章, 那么本节将会有非常多的相似之处
GObject
的信号(signal), 是一套为特定事件注册回调函数的系统
例如, 当点击按钮时, clicked
信号被 发射(emit), 为 clicked
信号注册的回调函数会执行
// Connect to "clicked" signal of `button`
button.connect_clicked;
或者这样, 类似于使用属性, 可以处理自定义信号:
// Connect to "clicked" signal of `button`
button.connect_closure;
这里的 false
表示该回调在默认处理程序之后调用,否则在之前调用
直接上代码:
// Trait shared by all GObjects
我们为 CustomButton
注册了自定义信号, 叫作 max-number-reached
, 当 发射(emit) 时, 发射一个类型为 i32 的数值
与命名属性时的规则一样, 我们应该遵循 kebab-case
让我们继续, 接下来自定义被点击时的行为, 我们让按钮被点击, 数值达到某个规定的最大值时, 发送该信号:
static MAX_NUMBER: i32 = 8;
// Trait shared by all buttons
点击按钮, 数值加一, 直到最大, 发射信号, 然后归零 (好湿好湿!)
现在,你已经知道如何连接信号, 自定义信号
如果您想通知 GObject 的使用者, 某个事件已经发生,那么自定义信号特别有用
上一篇: p6~> GObject-属性
下一篇: p8~> GObject-主事件循环