如何从Rust代码访问Slint DSL创建的控件及属性?
解决方法
1. 为Slint控件添加导出标记
要让Rust代码能访问Slint中的percent_widget,必须在Slint定义里给控件加上export关键字——这是Slint暴露控件给Rust的必要条件。修改后的Slint代码如下:
percent_widget := export Text { text: percent_widget.percent; in-out property <string> percent: "??.? %"; }
2. 在Rust中访问控件并设置属性
Slint编译后会为导出的控件生成对应的Rust API。假设你的根组件是App,可以按以下方式操作:
use slint::ComponentHandle; // 示例:通过slint!宏定义组件(如果是.ui文件编译,逻辑一致) slint::slint!{ App := Window { percent_widget := export Text { text: percent_widget.percent; in-out property <string> percent: "??.? %"; } } } fn main() { let app = App::new().unwrap(); // 获取导出的控件实例 let widget_handle = app.as_weak().unwrap().percent_widget(); // 设置percent属性 widget_handle.set_percent("92.3 %".into()); app.run().unwrap(); }
核心说明
export关键字是Slint与Rust交互的关键,没有它Rust编译生成的代码不会包含该控件的访问入口。- 对于
in-out类型的属性,Slint会自动生成set_<属性名>和get_<属性名>方法,直接调用即可修改或读取属性值。 - 若使用独立.ui文件编写Slint界面,只需在.ui文件中给控件添加
export,编译后Rust端的组件结构体依然会生成对应的控件访问方法。
内容的提问来源于stack exchange,提问作者Jan Diederich
相关产品推荐
相关产品推荐

