0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Rust UI框架:Slint UI简单入门

jf_wN0SrCdH 来源:Rust语言中文社区 2023-05-12 16:03 次阅读

Slint 1.0 已发布,标志着项目已顺利从开发阶段“毕业”,可正式用于生产环境。

Slint 可用于为各种操作系统处理器架构开发 UI,包括 Linux、macOS、Windows、WebAssembly、Blackberry QNX 和裸机。它允许 JavaScript 开发人员为嵌入式和桌面应用程序创建原生用户界面。

Slint UI 介绍

Slint 曾经被称为 SixtyFPS,特点是既快又小,是一个 Rust 编写的综合性 UI 工具包,用于为桌面和嵌入式设备构建原生用户界面。其开发团队希望将 Slint 打造成下一代 GUI 工具包,因此从头开始构建项目时就考虑了可扩展性、包容性、工具性和跨平台兼容性。

  • 流畅:平滑,触摸友好的用户接口

  • 跨平台:目标平台包括嵌入式设备和桌面应用软件(手机和网页)

  • 多语言:可以使用自己擅长的语言API(C++,Rust,JavaScript)

  • 快速设计:适时预览快速迭代

多语言支持的描述,参考官方原文:

We choose to first support this set of languages because it is the implementation language, another low level language, and a dynamic language. We believe that it will be easy to extend the integration into more programming languages later.

Slint 的定位是一个支持多语言、适配任意显示屏、且高效流畅的用户图形接口工具包。设计目标包括:

  • 可扩展:在连接到设备的任何屏幕上运行,从台式计算机到低功耗嵌入式设备

  • 轻量级:能够在几百KB内存的场景中运行,并且需要很少的处理能力。

  • 原生支持:Slint 支持多种目标平台,从嵌入式设备到桌面应用,包括移动设备和 Web。

开发团队表示,使用 Slint 构建的图形应用程序可以在内存小于 300 kB 的系统上运行,例如包含 264kB RAM 和 ARM Cortex-M0+ 处理器的 Raspberry Pi Pico。因此,Slint 非常适合为嵌入式设备应用程序开发 UI。

e32d15be-f09a-11ed-90ce-dac502259ad0.png

Slint 使用了声明式编程来简化 UI 的开发,优化应用程序开发和性能的方法是:

  • 用声明式语言来描述 UI,使用的语法提供了一种广泛的方式来描述各种图形元素,同时易于阅读、编写和学习

  • Slint 编译器对描述 UI 的代码进行优化并翻译成原生代码

  • 采用任何语言编写的业务逻辑,可通过使用 Slint 提供的特定于语言的 API 与 UI 连接

整体架构

e353995a-f09a-11ed-90ce-dac502259ad0.png

控件支持

e36e1190-f09a-11ed-90ce-dac502259ad0.jpg

示例:

  • 不同平台的原生桌面小部件(Windows、macOS、Linux)

e3887ed6-f09a-11ed-90ce-dac502259ad0.png

e39e3d66-f09a-11ed-90ce-dac502259ad0.png

e3b4ba96-f09a-11ed-90ce-dac502259ad0.png

  • WebAssembly

e3c7403a-f09a-11ed-90ce-dac502259ad0.png

Slint 完全采用 Rust 实现,同时支持不同的编程语言,目前为 C++、JavaScript 和 Rust 提供了 API。

详情查看发布公告:https://slint-ui.com/blog/announcing-slint-1.0.html

MCU支持

slint-ui 是嵌入式开发的福音,基于 Rust ,使用了声明式编程来简化 UI 的开发,从此再也不用忍受 lvgl/minigui 之类各种各样的一大票用 c 搞出来的杂七杂八蹩脚又折磨人的 UI 框架(c 框架心智负担太重,很难做到界面与逻辑分离,一旦需求变动几乎就是灾难)。也许有人会问为什么不用 QT?QT 太庞大,不适合没有操作系统的单片机,再者QT For MCU是商业软件不开源,slint-ui 支持 GPLv3 许可证(采用GPL协议,总感觉有点怪怪的,不知道后续是否会步QT后尘全面商用收费)

关于移植到 MCU 相关的信息可以看一下官方文章及项目例程:

  1. Slint::mcu - Rust:https://slint-ui.com/releases/0.3.0/docs/rust/slint/docs/mcu/index.html

  2. Porting the Slint UI Toolkit to a Microcontroller with 264K RAM — Slint Blog:https://slint-ui.com/blog/porting-slint-to-microcontrollers.html

  3. Slint-mcu-rust-template.git:https://github.com/slint-ui/slint-mcu-rust-template.git

界面展示:
打印机:【查看在线交互演示】:https://slint-ui.com/releases/0.3.0/demos/printerdemo

e3ed93b6-f09a-11ed-90ce-dac502259ad0.png

Rust Slint 简单入门

1. slint 界面代码嵌入在 Rust 中

新建项目

cargo new rust-ui

添加库 TOML

[dependencies]
slint = "1.0.0"

main.rs中添加代码:

fn main() {
    // 运行slintUI窗体
    MainWindow::new().run();
}
// slint宏,创建 UI
slint::slint!{
    export component MainWindow inherits Window {
        title: "Main Window";
        width: 600px;
        height: 500px;
        // 定义一个 Text 组件
        Text{
            text: "Hello, world";
            color:blue;
        }
    }
}

上述是将界面 slint 代码嵌入在 rust 同一个文件中,slint 声明式编程来简化 UI 的开发,有 Flutter、Compose 以及其他前端开发经验同学很容易上手。更多组件的使用的请参考开发文档和 Demo示例

2、界面 slint 文件与 Rust 代码分开

cargo.toml 添加

[build-dependencies]
slint-build = "1.0.0"

添加界面文件,新建 ui/main.slint 文件

import {GroupBox, LineEdit, Button} from "std-widgets.slint";

export component MainWindow inherits Window {
    title: "Main Window";
    width: 600px;
    height: 500px;

    VerticalLayout { 
        alignment:start;
        padding-left: 25px;
        padding-right: 25px;

        Text { 
            font-size: 27px;
            font-weight: 700;
            color: #6776FF;  
         }

        GroupBox{
            title:"lineEdit";
            LineEdit {
                placeholder-text: "enter text";
            }
        }

        Button {
            text: "Click Me";
            clicked => { self.text = "Clicked"; }
        }

    }
}

添加 build.rs 文件

fn main() {
    slint_build::compile("ui/main.slint").unwrap();
}

main.rs 主文件

slint::include_modules!();

fn main() {
   MainWindow::new().unwrap().run().unwrap();
}

建立好的项目文件结构如下:

e405cb0c-f09a-11ed-90ce-dac502259ad0.png

执行命令:cargo run,运行效果如下图,以上所有程序开发均在vs code下完成(依赖slint官方插件)

注:VSCode插件:slint 语法高亮并可以进行界面预览 https://marketplace.visualstudio.com/items?itemName=Slint.slint

e41a8d08-f09a-11ed-90ce-dac502259ad0.png

总结

Slint 是一个 Rust 编写的综合性 UI 工具包,定义和提供一系列方便构建 UI 的组件,使用了声明式编程来简化 UI 的开发,可用于为桌面和嵌入式设备构建原生用户界面。使用 Slint 构建的图形应用程序可以在内存小于 300 kB 的系统上运行,实事求是的讲,内存较大的嵌入式设备上 Android 更占优势,但是低内存的嵌入式设备(比如单片机)上 Slint 有很大机会,总之,Slint 非常适合为嵌入式设备应用程序开发 UI

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 框架
    +关注

    关注

    0

    文章

    397

    浏览量

    17388
  • 嵌入式设备
    +关注

    关注

    0

    文章

    110

    浏览量

    16919
  • GUI
    GUI
    +关注

    关注

    3

    文章

    634

    浏览量

    39467

原文标题:Rust UI 框架:Slint UI 简单入门

文章出处:【微信号:Rust语言中文社区,微信公众号:Rust语言中文社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    VA段码COG液晶屏可个性化灵活设计UI,实现创意UI的高对比高亮多色彩炫酷显示。

    VA段码COG液晶屏可个性化灵活设计UI,实现创意UI的高对比高亮多色彩炫酷显示。
    的头像 发表于 07-11 10:50 429次阅读
    VA段码COG液晶屏可个性化灵活设计<b class='flag-5'>UI</b>,实现创意<b class='flag-5'>UI</b>的高对比高亮多色彩炫酷显示。

    使用 GPT4V+AI Agent 做自动 UI 测试的探索

    一、背景 从 Web 诞生之日起,UI 自动化就成了测试的难点,到现在近 30 年,一直没有有效的手段解决Web UI测试的问题,尽管发展了很多的 webdriver 驱动,图片 diff 驱动
    的头像 发表于 06-20 15:42 351次阅读
    使用 GPT4V+AI Agent 做自动 <b class='flag-5'>UI</b> 测试的探索

    鸿蒙Ability Kit(程序框架服务)【UIAbility组件与UI的数据同步】

    基于当前的应用模型,可以通过以下几种方式来实现UIAbility组件与UI之间的数据同步。
    的头像 发表于 06-03 10:26 394次阅读
    鸿蒙Ability Kit(程序<b class='flag-5'>框架</b>服务)【UIAbility组件与<b class='flag-5'>UI</b>的数据同步】

    鸿蒙ArkUI:【从代码到UI显示的整体渲染流程】

    方舟开发框架(简称ArkUI)是鸿蒙开发的UI框架,提供如下两种开发范式,我们 **只学声明式开发范式**
    的头像 发表于 05-13 16:06 753次阅读
    鸿蒙ArkUI:【从代码到<b class='flag-5'>UI</b>显示的整体渲染流程】

    鸿蒙OS开发实战:【自动化测试框架】使用指南

    为支撑HarmonyOS操作系统的自动化测试活动开展,我们提供了支持JS/TS语言的单元及UI测试框架,支持开发者针对应用接口进行单元测试,并且可基于UI操作进行UI自动化脚本的编写。
    的头像 发表于 04-08 14:49 1228次阅读
    鸿蒙OS开发实战:【自动化测试<b class='flag-5'>框架</b>】使用指南

    touchgfx的ui控件非常多的时候容易死机是什么原因导致的?

    由于项目比较复杂,ui上控件以及容器比较多,包括文本和动态文本都很多;当再增加文本或者增加ui图片的时候容易HardFault_Handler程序卡死;目前测试发现增加定义 几个动态文本 就死机,删除之后正常;也遇到过增加一张图片之后死机,删除图片之后就正常;
    发表于 03-21 06:09

    ocl最大输出功率和ui有关系吗

    在音频设备中,OCL(Output Capacitor-Less)电路是一种常见的功率放大电路。它具有结构简单、成本低廉、输出驱动能力强等优点,因此被广泛应用于音频放大器设计中。而UI参数指的是
    的头像 发表于 03-09 14:25 1568次阅读

    【AWTK开源智能串口屏方案】设计UI界面并上传到串口屏

    本篇文章将介绍如何使用AWStudio设计串口屏端的UI界面和添加绑定规则,以及怎么将资源文件上传到串口屏端。引言:AWTK-HMI是基于AWTK与AWTK-MVVM开发的低代码智能串口屏方案,本系
    的头像 发表于 02-22 08:24 612次阅读
    【AWTK开源智能串口屏方案】设计<b class='flag-5'>UI</b>界面并上传到串口屏

    微软发布Agent框架UFO,引领UI交互新纪元

    微软近日宣布推出全新的Agent框架——UFO(UI-Focused Agent),旨在构建更智能、更直观的用户界面交互体验。该框架基于OpenAI的GPT-4V图像识别模型开发,专为Windows操作系统上的应用程序设计,能够
    的头像 发表于 02-19 11:15 1083次阅读

    鸿蒙开发-HarmonyOS UI架构

    初步布局Index 当我们新建一个工程之后,首先会进入Index页。我们先简单的做一个文章列表的显示 class Article { title?: string desc?: string
    发表于 02-16 16:38

    鸿蒙实战开发-全局UI方法的功能

    使用全局UI的方法定义日期滑动选择器弹窗并弹出。
    的头像 发表于 02-02 17:13 523次阅读
    鸿蒙实战开发-全局<b class='flag-5'>UI</b>方法的功能

    HT UI 5.0,前端组件图扑是认真的!

    为顺应数字时代的不断发展,图扑 HT UI 5.0 在原有功能强大的界面组件库的基础上进行了全面升级,融入了更先进的技术、创新的设计理念以及更加智能的功能。
    的头像 发表于 01-30 10:17 430次阅读
    HT <b class='flag-5'>UI</b> 5.0,前端组件图扑是认真的!

    基于TouchGFX的智能手表设计 —底层驱动与 UI 进行关联

    电子发烧友网站提供《基于TouchGFX的智能手表设计 —底层驱动与 UI 进行关联.pdf》资料免费下载
    发表于 01-05 11:22 2次下载

    基于 TouchGFX 的智能手表设计—Designer 软件 UI 设计

    电子发烧友网站提供《基于 TouchGFX 的智能手表设计—Designer 软件 UI 设计.pdf》资料免费下载
    发表于 01-05 11:06 0次下载

    HamronyOS自动化测试框架使用指南

    概述 为支撑 HarmonyOS 操作系统的自动化测试活动开展,我们提供了支持 JS/TS 语言的单元及 UI 测试框架,支持开发者针对应用接口进行单元测试,并且可基于 UI 操作进行 UI
    发表于 12-19 10:26