Slint: 一套代码写遍嵌入式、桌面和移动端界面

做跨平台 GUI 开发的人,多少都踩过这些坑:用 Qt 怕授权,用 Electron 嫌体积大,用 Flutter 做桌面端又不够成熟。Slint 是一个开源的声明式 GUI 工具包,目标是用一套 UI 代码覆盖嵌入式设备、桌面和移动端。

正文顶部截图

项目在 GitHub 上拿到了 22,878 个 Star,背后的团队是德国的 SixtyFPS GmbH。

它解决什么问题

Slint 的核心思路是把界面描述和业务逻辑分开。界面用 .slint 文件定义,这是一种声明式的标记语言,写法接近 CSS 和 QML 的混合体。业务逻辑可以用 Rust、C++、JavaScript 或 Python 来写。

这种分离意味着设计师和开发者可以各干各的。设计师改布局不需要碰业务代码,开发者改逻辑也不会影响界面。

README区域截图

名字的含义

Slint 这个名字来自四个设计目标的首字母:

  • Scalable:响应式布局设计,跨操作系统和处理器架构
  • Lightweight:占用内存和 CPU 尽量少,在资源受限的设备上也能流畅运行
  • Intuitive:工具链好用,API 设计一致
  • Native:编译为原生代码,不是 WebView 套壳

Hello World

.slint 文件的写法很直白:

export component HelloWorld inherits Window {
    width: 400px;
    height: 400px;

    Text {
       y: parent.width / 2;
       x: parent.x + 200px;
       text: "Hello, world";
       color: blue;
    }
}

声明组件、设置属性、绑定数据,整体风格和 QML 类似,但语法更简洁。

嵌入式场景

Slint 在嵌入式领域的支持比较扎实。官方给出了在 Raspberry Pi、STM32 和 RP2040 上运行的演示视频。对于嵌入式开发者来说,能用声明式语言写 UI 而不是手撸像素坐标,省下的时间很可观。

渲染层面有三个后端可选:基于 OpenGL ES 2.0 的 femtovg、基于 Skia 的渲染器,以及纯 CPU 软件渲染。如果系统装了 Qt,还能用 Qt 的 QStyle 做原生风格控件。

开发工具

Slint 提供了一套开发工具链:

  • LSP Server:给编辑器提供自动补全和实时预览
  • VS Code 插件:从市场直接装
  • slint-viewer:带 --auto-reload 的本地预览工具
  • SlintPad:在线编辑器,浏览器里直接试写 .slint 语法
  • Figma to Slint 插件:从 Figma 设计稿导入到 Slint

实时预览功能对前端开发来说很实用,改一行代码立刻看到效果。

编译与运行时

.slint 文件会被预编译为原生代码。编译器做词法分析、语法分析、优化和代码生成,针对不同目标语言生成对应的代码:C++ 生成头文件,Rust 生成 .rs 文件,JavaScript 有解释器支持。

运行时库把组件、元素和属性放在同一块内存区域里,减少内存分配次数。属性绑定由编译器做内联优化,常量属性会被直接消除。

许可证

Slint 提供三种授权方式:

  1. 免费版:用于构建桌面、移动或 Web 应用,免版税
  2. GPLv3:用于构建开源嵌入式、桌面或 Web 应用
  3. 付费版:用于构建闭源嵌入式应用

对于个人开发者和开源项目来说,前两种基本够用。做商业嵌入式产品才需要考虑付费版。

多语言支持

目前 Slint 支持 Rust、C++、JavaScript/NodeJS 和 Python 四种语言的绑定。其中 JavaScript 和 Python 还处于 Beta 阶段。每种语言都有对应的 Getting Started 模板,上手门槛不高。

适合什么场景

Slint 比较适合这几类项目:资源受限的嵌入式设备需要好用的 UI、桌面应用想用声明式方式写界面、跨平台项目需要一套代码跑多个系统。如果项目重度依赖 Web 技术栈或者纯移动端开发,Slint 的优势就没那么明显了。

式设备需要好用的 UI、桌面应用想用声明式方式写界面、跨平台项目需要一套代码跑多个系统。如果项目重度依赖 Web 技术栈或者纯移动端开发,Slint 的优势就没那么明显了。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐