Estou aprendendo Slint (e Rust) e estou preso lendo o atributo de texto do widget TextEdit.
Meu slint gui é descrito da seguinte forma:
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();
}
}
}
}
E, na main()
função ferrugem estou tentando obter o valor do texto para imprimi-lo no console:
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()
}
Quando clico no Gen QRNote
botão, o texto inicial "Pouet" é exibido. Mas se eu modificar o texto no gui TextEdit e clicar novamente em Gen QRNote
, o texto editado não será exibido, apenas o texto inicial "Pouet".
Parece que a interface do usuário está duplicada. Qual é o método correto para apontar na referência inicial da interface do usuário?
Alternativa 1
Você precisa atualizar manualmente a
thetext
propriedade quando oedited
evento ocorrer:Alternativa 2
Você pode criar a
thetext
propriedadein-out
e aceitar umstring
argumento no seuqr-note-edited
retorno de chamada:Então você pode atualizar a
thetext
propriedade em seu retorno de chamada de ferrugem da seguinte forma: