Slint 新手指南:用 3 行代码构建原生图形界面的完整上手教程
【免费下载链接】slintSlint is an open-source declarative GUI toolkit to build native user interfaces for Rust, C++, JavaScript, or Python apps.项目地址: https://gitcode.com/GitHub_Trending/sl/slint
Slint 是一个开源的声明式 GUI 工具包:界面用.slint标记语言描述,业务逻辑用 Rust、C++、Python 或 JavaScript 编写,编译后在桌面、嵌入式和 Web(WASM)平台生成原生界面。本教程面向第一次接触 Slint 的开发者,按"先跑通、再迭代、后适配"的场景组织,全部命令可直接复制执行。
Slint 安装与开发环境准备
最短路径只有一行:用 Rust 工具链安装界面预览工具slint-viewer(1.92 及以上版本均可)。
cargo install slint-viewer它用于实时预览.slint文件、离线渲染截图和无窗口语法检查,是日常迭代的核心工具。若不想从源码安装,也可以直接运行仓库内的示例。
| 组件 | 用途 | 要求 |
|---|---|---|
| Rust + cargo | 构建与运行应用 | 1.92 及以上,rustc --version查看 |
| slint-viewer | 预览.slint文件 | cargo install slint-viewer |
| Linux 系统依赖 | 窗口与字体后端 | libxcb-shape0-dev、libxcb-xfixes0-dev、libxkbcommon-dev、libfontconfig-dev |
| macOS | 基础工具链 | xcode-select --install |
| Windows | 编译工具 | MSVC Build Tools,且rustup default stable-x86_64-pc-windows-msvc |
| Qt(可选) | 原生控件外观 | qmake在PATH中时自动启用 qt 风格 |
以上要求摘自仓库内的构建说明:docs/building.md。Skia 渲染器仅在部分平台提供预编译二进制,默认使用 femtovg 渲染器时无需额外安装。
从 0 到第一次成功运行:Slint Rust 应用
仓库自带四个语言的完整示例,位于 examples/,其中 examples/memory/ 是最小的完整应用。直接运行:
cargo run --manifest-path examples/Cargo.toml -p memory窗口出现即表示环境配置成功。若只想看 5 行代码的最小形式,可在任意 Rust 项目中声明依赖slint = "1.16",然后在main.rs里用宏内联描述界面:
slint::slint!{ export component HelloWorld { Text { text: "hello world"; color: green; } } } fn main() { HelloWorld::new().unwrap().run().unwrap(); }界面与逻辑分离是 Slint 的基本约定:.slint文件负责布局、属性和事件,宿主语言负责数据与外部系统调用。slint!宏把界面编译进二进制;文件较长时改用独立的.slint文件加include_modules!加载,结构见 api/rs/slint/README.md。
日常开发循环:slint-viewer 实时预览与检查
修改.slint文件后不必每次重新编译整个应用,slint-viewer --auto-reload会监听文件变化并热重载窗口:
slint-viewer --auto-reload examples/gallery/gallery.slint另两个高频参数:--check编译并打印诊断、不开窗口,退出码 0/1 可接入 CI;--screenshot把组件渲染成图片后退出,适合无显示器的环境:
slint-viewer --check ui/app.slint slint-viewer --screenshot out.png ui/app.slint编辑器里安装 VS Code 扩展(editors/vscode/)可再获得自动补全与实时预览,LSP 服务源码在 tools/lsp/。没有编辑器支持时,viewer 的--auto-reload就是替代品。
非默认环境适配:CMake、npm、uv 与交叉编译
Rust 之外,三种语言栈各自有最短启动路径,依赖与命令如下:
| 语言栈 | 构建工具 | 关键依赖 | 运行命令 |
|---|---|---|---|
| C++ | CMake 3.21+ | 支持 C++20 的编译器(GCC 10 / MSVC 2022) | cmake -B build && cmake --build build |
| Node.js | npm | Node.js 20+ | npm install && npm start |
| Python | uv | 无额外要求 | uv sync && uv run main.py |
C++ 项目用slint_target_sources把界面文件挂到目标上,例如 examples/carousel/。交叉编译推荐cross,仓库根目录已附带 Cross.toml:
cross build --target armv7-unknown-linux-gnueabihf --manifest-path demos/Cargo.toml -p printerdemo --release把产物拷到树莓派后以DISPLAY=:0 ./printerdemo启动。更细的 CMake 与跨平台步骤见 docs/building.md 的 Cross-Compiling 一节。
出错时去哪里查:Slint 常见错误速查
| 现象 | 原因 | 一句话解法 |
|---|---|---|
Linux 下链接或启动报xcb、fontconfig找不到 | 系统库缺失 | 按安装一节的apt列表安装开发包 |
CMake 报找不到SlintConfig | C++ 库未安装或未指向安装目录 | 先构建并cmake --install,再设SLINT_DIR或CMAKE_PREFIX_PATH |
| Windows 克隆仓库后文件缺失 | 未启用符号链接 | 开发者模式下重新克隆并启用core.symlinks |
| 嵌入式设备黑屏或崩溃 | GPU 依赖不满足 | 换 CPU 软件渲染后端(softwarerenderer) |
slint-viewer --check退出码非 0 | .slint语法或类型错误 | 按诊断输出的行号修改后重新--check |
| CMake 首次构建极慢 | 首次从源码拉取并编译 Slint 运行时 | 属正常现象,后续增量构建很快 |
常用命令速查表
| 命令 | 作用 | 典型参数 |
|---|---|---|
cargo install slint-viewer | 安装预览工具 | 无 |
cargo run --manifest-path examples/Cargo.toml -p memory | 运行 Rust 示例 | -p指定示例名,--release优化构建 |
slint-viewer <file.slint> | 预览界面 | -从标准输入读取 |
slint-viewer --auto-reload <file.slint> | 监听文件变化热重载 | 与--save-data互斥 |
slint-viewer --check <file.slint> | 编译检查,退出码 0/1 | 可接入 CI |
slint-viewer --screenshot out.png <file.slint> | 渲染截图并退出 | SLINT_SCALE_FACTOR调整缩放 |
cmake -B build && cmake --build build | C++ 构建 | -GNinja加速 |
cross build --target armv7-unknown-linux-gnueabihf ... | 交叉编译 | --manifest-path指定 workspace |
项目目录约定:Slint 仓库结构
slint/ ├── Cargo.toml # 根 workspace:核心库与工具 ├── internal/ # 编译器、运行时、渲染器 ├── api/ # Rust / C++ / Node.js / Python 绑定 ├── examples/ # 独立 workspace,各语言可运行示例 ├── demos/ # 独立 workspace,完整演示应用 ├── tests/ # 独立 workspace,测试驱动 ├── tools/ # slint-viewer、LSP 服务器、SlintPad ├── editors/ # VS Code、Kate、Zed 等编辑器集成 └── docs/ # 文档站点与构建说明根 workspace 承载库与工具;examples/、demos/、tests/各自独立,共享同一个target/目录,公共库只编译一次,rust-analyzer 也因此保持轻量。单语言项目的典型结构则是ui/*.slint存界面、src/存宿主语言逻辑、Cargo.toml(或CMakeLists.txt)声明依赖。
下一步
- 通读 examples/ 中的 gallery、carousel、memory,对照各自的
Cargo.toml理解依赖组织方式。 - 在 VS Code 中打开任意
.slint文件,验证 editors/vscode/ 扩展的补全与实时预览。 - 按 docs/building.md 的 Cross-Compiling 章节,用
cross构建一份树莓派可运行的产物,完成到嵌入式设备的第一步。
【免费下载链接】slintSlint is an open-source declarative GUI toolkit to build native user interfaces for Rust, C++, JavaScript, or Python apps.项目地址: https://gitcode.com/GitHub_Trending/sl/slint
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考