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

news2024/12/23 4:52:23

系列文章目录

【跟小嘉学 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.coloradmin.cn/o/1041377.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聊聊并发编程——多线程之synchronized

目录 一.多线程下数据不一致问题 二.锁和synchronized 2.1 并发编程三大特性 2.2引入锁概念 三.synchronized的锁实现原理 3.1 monitorenter和monitorexit 3.2synchronized 锁的升级 3.2.1偏向锁的获取和撤销 3.2.2轻量级锁的加锁和解锁 自适应自旋锁 轻量级锁的解锁…

位运算练习题(Java)

package KeepCoding.algorithm; //位运算知识点 /* 1. 0 ^ x x x ^ x 1 * 2. 位运算满足结合律和交换律,即运算顺序无关 */ //位运算练习题 //1.整数数组中有一个出现次数为奇数的整数,其余整数的出现次数均为偶数个,请找出数组中这位…

oracle

title: “Oracle” createTime: 2021-12-13T16:35:4108:00 updateTime: 2021-12-13T16:35:4108:00 draft: false author: “name” tags: [“oracle”] categories: [“db”] description: “测试的” 时间字段分析 timestamp 精确到秒后面6位 createTime: 2021-12-13T16:35:…

微积分学习笔记(2):用Go语言画函数图像

使用的Go库 gonum.org/v1/plotimage/color 待绘图函数 直接使用三角函 s i n sin sin: func f(x float64) float64 {return math.Sin(x) }绘图过程 1 创建一个绘图 p : plot.New()assert.NotNil(t, p)p.Title.Text "Function Image"p.X.Label.Text "X&qu…

基于微信小程序的中医知识库系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言用户微信小程序端的主要功能有:管理员的主要功能有:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌…

crypto:Url编码

题目 下载题目所给的压缩包后解压,打开文件可得 由题目可知为url编码,所以使用解码工具解码即可得到flag

【深度学习实验】卷积神经网络(二):实现简单的二维卷积神经网络

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 二维互相关运算(corr2d) 2. 二维卷积层类(Conv2D) a. __init__(初始化) b. forward(前向传…

React基础教程(四):组件理解

1、函数式组件 实现代码 <script type"text/babel"> /*此处一定要写babel*/ // 1、创建函数式组件 function MyComponent() {console.log(this); // 此处的this是undefined&#xff0c;因为babel编译后开启了严格模式return <h2>我是用函数定义的组件&am…

unable to access xxxx: Failed to connect to xxxx

问题&#xff1a; 1、GitLab仓库加上双重验证后&#xff0c;设置GIt得 Manage Remotes时报错 unable to access xxxx: Failed to connect to xxxx SSL certificate problem:self signed certificate 解决 1、返回前面得操作步骤检查了一遍 没有问题 2、最后尝试一些方法解…

SPA项目之主页面--Mock.js以及组件通信(总线)的运用

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于VueElementUI的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.Mock.js是什么 二.为什么要使用…

跨域的解决方案

文章目录 概念一、什么是跨域问题二、为什么会发生跨域问题三、跨域解决方案1、JSONP2、添加响应头3、Spring注解CrossOrigin4、配置文件&#xff08;常用&#xff09;5、nginx跨域 概念 一、什么是跨域问题 前端调用的后端接口不属于同一个域&#xff08;域名或端口不同&…

Docker 容器监控之CAdvisor+InfluxDB+Granfana

是什么 一句话&#xff1a;CAdvisor监控收集InfluxDB存储数据Granfana展示图表 CAdvisor InfluxDB Granfana 总结 容器编排CIG CIG CAdvisorInfluxDBGranfana 1、新建目录 2、新建docker-compose.yml文件 version: 3.1volumes:grafana_data: {}services:influxdb:image: t…

1*1的卷积核如何实现降维/升维?

在众多网络中&#xff0c;1*1的卷积核被引入用来实现输入数据通道数的改变。 举例说明&#xff0c;如果输入数据格式为X*Y*6&#xff0c;X*Y为数据矩阵&#xff0c;6为通道数&#xff0c;如果希望输出数据格式为X*Y*5&#xff0c;使用5个1*1*6的卷积核即可。 其转换过程类似于…

C/C++程序,从命令行传入参数

C/C中如何让程序接受并处理命令行参数_c 命令行接收--version_饼干叔叔海洋的博客-CSDN博客 #include <stdio.h> #include <stdlib.h>//argc&#xff1a;argument count //argv: arguments vector,参数向量。 //33 777 103 int main(int argc, char **argv){ //…

配置OSPFv3引入外部路由及路由过滤 华为实验

1.1 实验介绍 1.1.1 关于本实验 在大型园区网络中&#xff0c;往往使用不同的路由协议进行组网&#xff0c;实现全网的网络互通。不同的协议间通信&#xff0c;除了路由协议本身&#xff0c;还需要引入外部路由及路由信息过滤等技术。 本章内容主要介绍OSPFv3路由过滤及引入外…

QT配置MySQL数据库 ninja: build stopped: subcommand failed

QT配置MySQL数据库 我当前的软件版本&#xff1a;QT Creator 10.0.2 (community)&#xff0c;MingW 6.4.3 (QT6)&#xff0c;MySQL 8.0。 MySQL不配置支持的数据库有QList("QSQLITE", "QODBC", "QPSQL")&#xff0c;这个时候是不支持MYSQL数据…

Rust之自动化测试(二):控制测试如何运行

开发环境 Windows 10Rust 1.72.1 VS Code 1.82.2 项目工程 这里继续沿用上次工程rust-demo 控制测试如何运行 正如cargo run编译您的代码&#xff0c;然后运行生成的二进制文件一样&#xff0c;cargo test在测试模式下编译您的代码&#xff0c;然后运行生成的测试二进制文件…

【计算机网络笔记五】应用层(二)HTTP报文

HTTP 报文格式 HTTP 协议的请求报文和响应报文的结构基本相同&#xff0c;由四部分组成&#xff1a; ① 起始行&#xff08;start line&#xff09;&#xff1a;描述请求或响应的基本信息&#xff1b;② 头部字段集合&#xff08;header&#xff09;&#xff1a;使用 key-valu…