我正在尝试增加Rust和GTK-RS应用程序的结构,但我无法弄清楚如何处理事件连接.我发现问题是在错误的生命周期中,但我真的不明白它是如何修复的.
#[derive(Debug)]
struct CreatingProfileUI {
window: gtk::MessageDialog,
profile_name_entry: gtk::Entry,
add_btn: gtk::Button,
cancel_btn: gtk::Button,
}
#[derive(Debug)]
struct UI {
window: gtk::Window,
// Header
url_entry: gtk::Entry,
open_btn: gtk::Button,
// Body
add_profile_btn: gtk::Button,
remove_profile_btn: gtk::Button,
profiles_textview: gtk::TextView,
// Creating profile
creating_profile: CreatingProfileUI,
// Statusbar
statusbar: gtk::Statusbar,
}
impl UI {
fn init(&self) {
self.add_profile_btn
.connect_clicked(move |_| { &self.creating_profile.window.run(); });
}
}
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
error[E0477]: the type `[closure@src/main.rs:109:46: 111:6 self:&UI]` does not fulfill the required lifetime
--> src/main.rs:109:30
|
109 | self.add_profile_btn.connect_clicked(move |_| {
| ^^^^^^^^^^^^^^^
|
= note: type must satisfy the static lifetime
Run Code Online (Sandbox Code Playgroud)
小智 7
您无法将非静态引用移动到GTK回调中.您需要静态或分配堆的东西(例如在Box/ RefCell/ Rc/ etc中).
不会从连接到信号的作用域调用回调,而是在主循环的某个稍后点调用回调.无论你传递给闭包的什么都是活着的,然后,这将是'static在main和主循环之间的堆栈上堆栈分配或分配的任何东西.目前使用Rust/GTK-rs无法很好地表达最后一部分.
有关示例,请参阅gtk-rs文档底部的示例.它使用了Rc<RefCell<_>>.
| 归档时间: |
|
| 查看次数: |
1213 次 |
| 最近记录: |