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

news/2024/10/20 15:55:27/

系列文章目录

【跟小嘉学 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

文章目录

  • 系列文章目录
    • @[TOC](文章目录)
  • 前言
  • 一、 Slint UI 介绍
    • 1.1、 Slint UI 介绍
    • 1.2、Slint 优点
    • 1.3、目标
    • 1.4、许可证
  • 二、快速开始
    • 2.1、创建工程
    • 2.2、添加依赖
    • 2.3、添加代码
  • 三、Slint和 Rust 分离
    • 3.1、添加依赖
    • 3.2、添加 hello.slint
    • 3.3、创建 build.rs
    • 3.4、main.rs
  • 总结

前言

本章节 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();
}

总结


http://www.ppmy.cn/news/1116546.html

相关文章

开源分布式存储系统(HDFS、Ceph)架构分析

文章目录 中间控制节点架构-HDFSNameNode节点分析DataNode节点分析SecondNameNode节点分析Client分析 完全无中心架构-CephCeph Monitor分析Ceph OSD分析Ceph Manager分析Ceph Clients分析 小结HDFS优点缺点 Ceph优点缺点 参考 中间控制节点架构-HDFS 以HDFS( Hado…

CRM软件系统价格不同的原因

很多人在了解CRM系统时,发现不同品牌的CRM价格有着很大的区别。一些CRM系统只需要几千块钱,一些CRM系统的报价却要上万,甚至十几万。为什么CRM系统价格不同?下面我们就来说说。 1、功能不同 从功能方面来说,一些CRM系…

Hugging Face使用Stable diffusion Diffusers Transformers Accelerate Pipelines VAE

Diffusers A library that offers an implementation of various diffusion models, including text-to-image models. 提供不同扩散模型的实现的库,代码上最简洁,国内的问题是 huggingface 需要翻墙。 Transformers A Hugging Face library that pr…

Edge 浏览器『版本回退』和『关闭更新』

前言 最近 Edge 浏览器又更新了,给整体浏览器页面布局进行大改动,之前苗条的标签页和收藏夹栏瞬间变得臃肿了,我实在无法忍受这种布局,所以我索性直接进行版本回退和设置永久关闭更新,详细步骤请看下文 Edge 浏览器版…

json数据传输压缩以及数据切片分割分块传输多种实现方法,大数据量情况下zlib压缩以及bytes指定长度分割

json数据传输压缩以及数据切片分割分块传输多种实现方法,大数据量情况下zlib压缩以及bytes指定长度分割。 import sys import zlib import json import mathKAFKA_MAX_SIZE 1024 * 1024 CONTENT_MIN_MAX_SIZE KAFKA_MAX_SIZE * 0.9def split_data(data):"&q…

uniapp 实现不同用户展示不同的tabbar(底部导航栏)

一、背景 最近在做一个uniapp开发的小程序遇到一个需求,希望不同用户登录后展示不同的tabbar页面,但是uniapp项目中的pages.json是只有一个list数组的,并且是不能写成动态效果,为了实现这个需求,便自定义了tabbar组件 …

基于YOLOv8模型的烟火目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要:基于YOLOv8模型的烟火目标检测系统可用于日常生活中检测与定位烟火目标,利用深度学习算法可实现图片、视频、摄像头等方式的目标检测,另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数据集…

小样本目标检测:ECEA: Extensible Co-Existing Attention for Few-Shot Object Detection

论文作者:Zhimeng Xin,Tianxu Wu,Shiming Chen,Yixiong Zou,Ling Shao,Xinge You 作者单位:Huazhong University of Science and Technology; UCAS-Terminus AI Lab 论文链接:http://arxiv.org/abs/2309.08196v1 内容简介: 1&…