我正在学习 Slint (和 Rust),并且我一直在阅读 TextEdit 小部件的文本属性。
我的 slint gui 描述如下:
import { Button, VerticalBox } from "std-widgets.slint";
import { HorizontalBox, TextEdit } from "std-widgets.slint";
export component AppWindow inherits Window {
in-out property<int> counter: 42;
out property<string> thetext: "Pouet";
callback request-increase-value();
callback compute-qr-code();
callback qr-note-edited();
VerticalBox {
TextEdit {
text: thetext;
width: 300px;
height: 300px;
edited => {
root.qr-note-edited();
}
}
Button {
text: "Increase value";
clicked => {
root.request-increase-value();
}
}
Button {
text: "Gen QRNote";
clicked => {
root.compute-qr-code();
}
}
}
}
并且,在 rustmain()
函数中,我试图获取文本值以在控制台中打印它:
slint::include_modules!();
fn main() -> Result<(), slint::PlatformError> {
let ui = AppWindow::new()?;
let ui_handle = ui.as_weak();
ui.on_request_increase_value(move || {
let ui = ui_handle.unwrap();
ui.set_counter(ui.get_counter() + 1);
println!("button pushed");
});
let ui_handle = ui.as_weak();
ui.on_compute_qr_code(move || {
let ui = ui_handle.unwrap();
println!("{}",ui.get_thetext());
});
let ui_handle = ui.as_weak();
ui.on_qr_note_edited(move || {
let ui = ui_handle.unwrap();
println!("text changed -> {}", ui.get_thetext());
});
ui.run()
}
当我单击Gen QRNote
按钮时,会显示初始文本“Pouet”。但是,如果我在 gui TextEdit 中修改文本并重新单击Gen QRNote
,则不会显示编辑的文本,仅显示初始的“Pouet”文本。
看来 ui 是重复的。指向初始 ui 参考的正确方法是什么?
替代方案1
thetext
当事件发生时,您需要手动更新属性edited
:替代方案2
您可以创建该
thetext
属性并在回调中in-out
接受参数:string
qr-note-edited
thetext
然后你可以像这样更新你的 Rust 回调中的属性: