GTK RS-单击按钮,从条目中获取信息

问题描述 投票:0回答:1

我对Rust还是比较陌生,对gtk-rs的了解甚至更少,现在想学习。

我正面临一个问题,我想从按钮单击的条目中获取输入,并在单击另一个按钮时显示该信息。但这给了我一个错误,因为闭包获得了我想在其中存储信息的“ firstname”变量的所有权。我如何从条目中获取信息并可以重复使用?

// import gtk libs
extern crate gtk;
extern crate gio;

// declare use of gtk
use gtk::prelude::*;

fn main() {
    let mut firstname = String::new();

    if gtk::init().is_err() {
        println!("Failed to initialize GTK.");
        return;
    }
    let glade_src = include_str!("builder.glade");
    let builder = gtk::Builder::new_from_string(glade_src);

    let window: gtk::Window = builder.get_object("window1").unwrap();
    let buttonSubmit: gtk::Button = builder.get_object("buttonSubmit").unwrap();
    let buttonShow: gtk::Button = builder.get_object("buttonShow").unwrap();
    let entryFirstname: gtk::Entry = builder.get_object("entryFirstname").unwrap();

    // get information from entry
    buttonSubmit.connect_clicked(move |_| {
        firstname = entryFirstname.get_buffer().get_text();
    });

    // output information
    let firstname_clone = firstname.clone();
    buttonShow.connect_clicked(move |_| {
        println!("Firstname: {}", firstname_clone);
    });

    window.show_all();

    gtk::main();
}
rust gtk-rs
1个回答
0
投票

一旦您的字符串已在闭包内移动,编译器将无法再静态检查您是否不在混合对其的读写访问。您需要使用RefCell启用读/写访问的运行时选择,可能与RefCell结合使用以进行适当的内存管理:

Rc
© www.soinside.com 2019 - 2024. All rights reserved.