【跟小嘉学 Rust 编程】三十、Rust 使用 Slint UI

2023-09-19 05:40:37

系列文章目录

【跟小嘉学 Rust 编程】一、Rust 编程基础
【跟小嘉学 Rust 编程】二、Rust 包管理工具使用
【跟小嘉学 Rust 编程】三、Rust 的基本程序概念
【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念
【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据
【跟小嘉学 Rust 编程】六、枚举和模式匹配
【跟小嘉学 Rust 编程】七、使用包(Packages)、单元包(Crates)和模块(Module)来管理项目
【跟小嘉学 Rust 编程】八、常见的集合
【跟小嘉学 Rust 编程】九、错误处理(Error Handling)
【跟小嘉学 Rust 编程】十一、编写自动化测试
【跟小嘉学 Rust 编程】十二、构建一个命令行程序
【跟小嘉学 Rust 编程】十三、函数式语言特性:迭代器和闭包
【跟小嘉学 Rust 编程】十四、关于 Cargo 和 Crates.io
【跟小嘉学 Rust 编程】十五、智能指针(Smart Point)
【跟小嘉学 Rust 编程】十六、无畏并发(Fearless Concurrency)
【跟小嘉学 Rust 编程】十七、面向对象语言特性
【跟小嘉学 Rust 编程】十八、模式匹配(Patterns and Matching)
【跟小嘉学 Rust 编程】十九、高级特性
【跟小嘉学 Rust 编程】二十、进阶扩展
【跟小嘉学 Rust 编程】二十一、网络编程
【跟小嘉学 Rust 编程】二十三、Cargo 使用指南
【跟小嘉学 Rust 编程】二十四、内联汇编(inline assembly)
【跟小嘉学 Rust 编程】二十五、Rust命令行参数解析库(clap)
【跟小嘉学 Rust 编程】二十六、Rust的序列化解决方案(Serde)
【跟小嘉学 Rust 编程】二十七、Rust 异步编程(Asynchronous Programming)
【跟小嘉学 Rust 编程】二十八、Rust中的日期与时间
【跟小嘉学 Rust 编程】二十九、Rust 中的零拷贝序列化解决方案(rkyv)
【跟小嘉学 Rust 编程】三十、Rust 使用 Slint UI

前言

本章节 Slint UI 介绍,这是一个支持多语言(Rust/CPP/javascript)的、跨平台的、简单易用、高效执行的 UI库,Slint 是一个类似 QML 的标记语言,经过编译器 slinit compile 可完整的转换成CPP或者 Rust,其开发方式类似与QML+CPP。

主要教材参考 《The Rust Programming Language》
主要教材参考 《Rust For Rustaceans》
主要教材参考 《The Rustonomicon》
主要教材参考 《Rust 高级编程》
主要教材参考 《Cargo 指南》
主要教材参考 《Rust 异步编程》


一、 Slint UI 介绍

1.1、 Slint UI 介绍

Slint UI 介绍,这是一个支持多语言(Rust/CPP/javascript)的、跨平台的、简单易用、高效执行的 UI库,Slint 是一个类似 QML 的标记语言,经过编译器 slinit compile 可完整的转换成CPP或者 Rust,其开发方式类似与QML+CPP。

1.2、Slint 优点

  • 流畅:平滑,触摸友好的用户接口
  • 跨平台:目标平台包括嵌入式设备和桌面应用软件(手机和网页)
  • 多语言:可以使用自己擅长的语言API(C++,Rust,JavaScript)
  • 快速设计:适时预览快速迭代

1.3、目标

slint 定位是一个可多语言、可任意显示屏适配的高效流畅的用户图形接口工具包。设计目标包括如下几点

  • 简便:编码或设计人员能有成就感并能享受开发和设计的过程。APIs不管在哪种语言下都保证一致性、简单易用、符合直观感觉。文档介绍API时应注重观念的传授及api如何使用
  • 轻量:能够适用于几百K的内存及低功耗设备。
  • 本地化:slint支持多种多样的目标平台,从嵌入式设备到桌面应用包括手机和网页。用户和开发者都应感受不到与当前使用平台的差异。不管是外观还是主观感觉还是经验都应符合用户对本地应用的期望

1.4、许可证

需要注意它采用的 GPLv3 以及商业许可证。

二、快速开始

2.1、创建工程

cargo new slint_learn

2.2、添加依赖

cargo add slint

2.3、添加代码

slint::slint!{
    export component MainWindow inherits Window {
        width: 300px;
        height: 300px;
        title: "第一个slint程序";
        Text {
            text: "hello world";
            color: green;
        }
    }
}

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

运行结果
在这里插入图片描述

三、Slint和 Rust 分离

3.1、添加依赖

cargo add slint-build --build

3.2、添加 hello.slint

在src 目录下创建一个 components/hello.slint 文件

export component MainWindow inherits Window {
    width: 300px;
    height: 300px;
    title: "第一个slint程序";
    Text {
        text: "hello world";
        color: green;
    }
}

3.3、创建 build.rs

fn main(){
    slint_build::compile("src/components/hello.slint").unwrap();
}

3.4、main.rs

slint::include_modules!();

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

总结

更多推荐

麒麟信安的2023世界计算大会时刻

9月15至16日,由工业和信息化部、湖南省人民政府主办的2023世界计算大会在长沙隆重举行。麒麟信安连续五年亮相世界计算大会,本届大会麒麟信安作为计算产业的重要建设者、国家新一代自主安全计算系统产业集群内核心企业,在展览展示、主题演讲、工控操作系统创新研究院揭牌仪式等多环节中深度参与。大会以“计算万物湘约未来——计算产

Leetcode算法入门与数组丨3. 数组基础

文章目录前言1数组简介2数组的基本操作2.1访问元素2.2查找元素2.3插入元素2.4改变元素2.5删除元素3总结task03task04前言Datawhale组队学习丨9月Leetcode算法入门与数组丨打卡笔记这篇博客是一个入门型的文章,主要是自己学习的一个记录。内容会参考这篇笔记(很详细):LeetCode算法笔

Python中的3D矩阵操作

迷途小书童读完需要6分钟速读仅需2分钟3D矩阵又称为立体矩阵,是指一个具有三个维度的矩阵结构。相比二维矩阵,它增加了一个深度维度。在3D矩阵中,第一个维度表示行数,第二个维度表示列数,第三个维度表示层数或深度,可以想象成一个多层的立方体结构。三维矩阵通常也称为NxNxN矩阵,在计算机视觉、医学成像、深度学习、增强现实等

Unity使用Mirror制作局域网的同步

1.脚本布置.参考tank那个demo制作1.新建空物体,为管理脚本的物体:manager,挂载NetworkManager,kcpTransport,NetworkManagerHud.2.设置玩家出生点,spawnPoint,设置好初始化的position的位置(*),挂载NetworkStartPosition的

Cortex-M3/M4基础

一、Cortex-M3/M4通用寄存器1、我们首先来了解一下M3/M4的寄存器,M4比M3多了一个浮点单元FPU。其他的部分基本和M3是一样的。2、Cortex-M3/M4系列处理器拥有通用寄存器R0-R15以及一些特殊功能的寄存器。3、R0‐R12是最“通用目的”的。4、但是绝大多数的16位指令只能使用R0‐R7(低

学习JVM调优

学习JVM调优是为了优化Java应用程序的性能和资源利用。本文将从以下几个方面详细介绍学习JVM调优的步骤和技巧,帮助读者更好地理解和应用这些调优技术。第一部分:理解JVM在学习JVM调优之前,我们需要先理解JVM的工作原理和内部机制。Java虚拟机是Java程序运行的环境,它负责将Java字节码转换为机器代码并运行。

docker学习:dockerfile和docker-compose

学习如何使用dockerfile以下内容,部分来自gpt生成,里面的描述可能会出现问题,但代码部分,我都会进行测试。1.需求对于一个docker,例如python,我们需要其在构建成容器时,就有np。有以下两种方法:pullpython,并run后,在里面pipinstallnumpy,随后对这个容器进行打包保存在pu

如何使用微信文件传输助手?看这里!

微信文件传输助手在哪里?为什么我找不到?有哪位朋友能够告诉我吗?微信文件传输助手是微信官方推出的一款辅助工具,为用户提供了便捷的文件传输方式。用户在使用微信的过程中,可以随时随地通过该功能在手机和电脑之间任意传输照片、视频以及文件。但是有些朋友可能不知道微信文件传输助手怎么使用,接下来,就让小编带大家看看如何使用微信文

单中的部分字段失去焦点后,将数据还原为进入弹窗时的接口数据

要实现在表单中的部分字段失去焦点后,将数据还原为进入弹窗时的接口数据,可以在进入弹窗时将接口数据保存为一个备份,然后在失去焦点的事件处理函数中将字段值设置为备份数据中相应字段的值。如果this.form.originalData的值被同步修改,原因可能是因为JavaScript中的对象是引用类型。当你将一个对象赋值给另

sed命令在Mac和Linux下的不同

问题(1)Windows系统里,文件每行结尾是'<回车><换行>','\r\n'(2)Mac系统里,文件每行结尾是'<回车>',即'\r'(3)Unix系统里,文件每行结尾是'<换行>',即'\n'所以,用'\n'作为作为换行符的文件,用Windows的记事本打开时会没有换行;而用'\r\n'作为换行符的文件(wind

科普之加密、签名和SSL握手

一背景知识感悟:不能'高不成低不就'备注:以下内容'没有'逻辑排版,仅'做记录'①加密方式说明:'单向'和'双向'认证遗留:如何用openssl从'私钥'中提取'公钥'?②互联网数据安全可靠条件说明:'二者'相互印证二互联网加密的细节①多种方式混合进行加密说明:'加密'保证数据传输过程的'安全性'②图解加密和解密细节1

热文推荐