DrawingArea
每次调用该draw()
函数时,我都想刷新 a 。我已经阅读了 DrawingArea 的更新绘图功能,所以我知道在连接新绘图信号之前我需要断开旧绘图信号。DrawingArea
有方法disconnect(id: SignalHandlerId)
,所以这段代码编译,但不显示绘图:
let id = drawing_area.connect_draw(move |_, cr| {
// drawing
});
drawing_area.disconnect(id);
当我尝试保存 id 以在连接新信号之前断开旧信号时,我需要明确声明id
为SignalHandlerId
:
extern crate cairo;
extern crate gio;
extern crate gtk;
use gtk::prelude::*;
pub struct DrawingMechanism {
id: gtk::glib::signal::SignalHandlerId,
used: bool,
}
impl DrawingMechanism {
pub fn draw(&self, drawing_area: >k::DrawingArea) {
if self.used {
drawing_area.disconnect(self.id);
} else {
self.used = true; // first call doesn`t have old id
}
self.id = drawing_area.connect_draw(move |_, cr| {
// drawing
});
}
}
问题是:编译器告诉我这gtk::glib
是私有的,所以我不能使用它。如果我尝试添加 glib 板条箱并使用它而不是gtk::glib
,编译器会告诉我我正在使用glib::SignalHandlerId
,DrawingArea::connect_draw()
返回的是glib::signal::SignalHandlerId
.
如何声明id
变量以便存储旧的信号 ID?
编辑:这只是版本不匹配,我试图使用glib
version 0.9.0
,但gtk
正在使用0.8.2
.