Slint是什么
Slint是一个跨平台的UI工具包,支持windows,linux,android,ios,web,可以用它来构建申明式UI,后端代码支持rust,c++,python,nodejs等语言。
开源地址:https://github.com/slint-ui/slint
镜像地址:https://kkgithub.com/slint-ui/slint
官方文档:https://docs.slint.dev/latest/docs/slint/
学习动机
对rust好奇,想学习除了QT之外的流行的跨平台UI。
其实现在除了QT之外,还有Avalonia/Uno/MAUI可以跨平台,但是,听说rust性能高,而且对申明式UI很感兴趣,想了解下Slint与C#系的Xaml
有何不同。
开始
学习视频
https://www.bilibili.com/video/BV1r14y1k7T5
IDE选择
IDE可以选择vscode
和rustrover
,这里,我选择rustrover
环境配置
rust安装
略
IDE配置
打开RustRover
选择上方菜单文件->设置->插件
,在marketplace
中搜索slint
然后点击安装
小试牛刀
按照官网文档指示,新建slint项目要向github拉取模板,由于github经常上不去,所以就没有采用这种做法
我们用另外一种方式:
新建rust项目
cargo new slint_first_project
使用rustrover打开刚新建的项目
cd slint_first_project
rustrover .
项目结构如下所示:
添加视图并运行
添加slint包的引用
cargo add slint
添加build-dependencies
打开Cargo.toml
,添加如下内容:
[build-dependencies]
slint-build = "1.9.2"
最后Cargo.toml
内容如下所示:
添加视图(.slint)
在与src同级的目录添加views文件夹,用于存放.slint
文件:
在views
文件夹中添加MyWindow.slint
文件:
在MyWindow.slint
文件中写入如下申明式UI代码:
export component MyWindow inherits Window {title: "this is my window";height: 600px;width: 1000px;GridLayout {spacing: 10px;Row{Rectangle {height: 30px;background: red;Text {text: "top";}}}Row{Rectangle {background: gray;Text {text: "center";}}}Row{Rectangle {height: 30px;background: blue;Text {text: "bottom";}}}}
}
添加build.rs
添加这个,告知主窗体的slint文件在哪里
在Cargo.toml
中添加build.rs
,并写入如下代码:
fn main(){slint_build::compile("views/MyWindow.slint").unwrap()
}
注意路径,要指向刚新建的MyWindow.slint
在src/main.rs中编写启动函数
slint::include_modules!();//让系统知道MyWindow从哪里来的
fn main() {MyWindow::new().unwrap().run().unwrap()
}
运行项目
cargo run
运行效果如下所示: