rust 如何访问由slint DSL代码创建的小部件?

b4wnujal  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(165)

如果我通过Slint-Code创建小部件,我如何从Rust-Code访问它们?我无法找到如何访问他们的属性,也无法直接访问它们。
示例如下:

...
percent_widget := Text {
    text: percent_widget.percent;
    in-out property <string> percent: "??.? %";
}
...

字符串
这在预览中运行得非常好,但我无法找到如何设置percent_widget.percent文本属性,或从Rust-Code访问percent_widget小部件。
我使用的是slint 1.1.1和Rust 1.71。

7gcisfzg

7gcisfzg1#

你不能直接从Rust访问widget,但是如果percent属性暴露在你的应用程序的根目录中,或者在一个全局单例中,你可以访问它。你可以这样做:
(在Rust中使用slint内联,但当然这也适用于单独的文件)

slint::slint! {

import { VerticalBox } from "std-widgets.slint";
export component Demo inherits Window {
    // exposed to Rust, access via Demo::set_percent() and Demo::get_percent()
    // Create an alias
    in-out property percent <=> percent_widget.percent;

    VerticalBox {
        percent_widget := Text {
            text: percent_widget.percent;
            in-out property <string> percent: "??.? %";
        }
    }
}
}

fn main() {
    let demo = Demo::new().unwrap();
    demo.set_percent("25".into());
    demo.run().unwrap();
}

字符串
或者你也可以使用单例,如果你不想转发属性:

slint::slint! {

import { VerticalBox } from "std-widgets.slint";

// global that's exported -> accessible via Rust
export global PercentageAdapter {
    in property <string> percent;
}

export component Demo inherits Window {
    VerticalBox {
        percent_widget := Text {
            text: PercentageAdapter.percent;
        }
    }
}
}

fn main() {
    let demo = Demo::new().unwrap();
    demo.global::<PercentageAdapter>().set_percent("25".into());
    demo.run().unwrap();
}

相关问题