Slint的学习

news/2025/2/6 17:39:51 标签: 学习

Slint是什么

Slint是一个跨平台的UI工具包,支持windows,linux,android,ios,web,可以用它来构建申明式UI,后端代码支持rust,c++,python,nodejs等语言。
开源地址:https://github.com/slint-ui/slint
镜像地址:https://kkgithub.com/slint-ui/slint
官方文档:https://docs.slint.dev/latest/docs/slint/

学习动机

对rust好奇,想学习除了QT之外的流行的跨平台UI。
其实现在除了QT之外,还有Avalonia/Uno/MAUI可以跨平台,但是,听说rust性能高,而且对申明式UI很感兴趣,想了解下Slint与C#系的Xaml有何不同。

开始

学习视频

https://www.bilibili.com/video/BV1r14y1k7T5

IDE选择

IDE可以选择vscoderustrover,这里,我选择rustrover

环境配置

rust安装

IDE配置

打开RustRover选择上方菜单文件->设置->插件,在marketplace中搜索slint然后点击安装
在这里插入图片描述

小试牛刀

按照官网文档指示,新建slint项目要向github拉取模板,由于github经常上不去,所以就没有采用这种做法

我们用另外一种方式:

新建rust项目

cargo new slint_first_project

在这里插入图片描述

使用rustrover打开刚新建的项目

cd slint_first_project
rustrover .

项目结构如下所示:
在这里插入图片描述

添加视图并运行

添加slint包的引用

cargo add slint

在这里插入图片描述

添加build-dependencies

打开Cargo.toml,添加如下内容:

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

最后Cargo.toml内容如下所示:
在这里插入图片描述

添加视图(.slint)

在与src同级的目录添加views文件夹,用于存放.slint文件:

在这里插入图片描述
views文件夹中添加MyWindow.slint文件:

在这里插入图片描述
MyWindow.slint文件中写入如下申明式UI代码:

export component MyWindow inherits Window {
    title: "this is my window";
    height: 600px;
    width: 1000px;

    GridLayout {
        spacing: 10px;
        Row{
            Rectangle {
            height: 30px;
            background: red;
            Text {
               text: "top";
                 }
            }
        }
        Row{
            Rectangle {
            background: gray;
            Text {
               text: "center";
                 }
            }

        }
         Row{
            Rectangle {
            height: 30px;
            background: blue;
            Text {
               text: "bottom";
                 }
            }

         }
    }
}

添加build.rs

添加这个,告知主窗体的slint文件在哪里
Cargo.toml中添加build.rs,并写入如下代码:

fn main(){
    slint_build::compile("views/MyWindow.slint").unwrap()
}

在这里插入图片描述

注意路径,要指向刚新建的MyWindow.slint

在src/main.rs中编写启动函数

slint::include_modules!();//让系统知道MyWindow从哪里来的
fn main() {
    MyWindow::new().unwrap().run().unwrap()
}

运行项目

cargo run

运行效果如下所示:
在这里插入图片描述


http://www.niftyadmin.cn/n/5843212.html

相关文章

Vue前端开发-pinia之Actions插件

Store中的Actions部分,用于定义操作属性的方法,类似于组件中的methods部分,它与Getters都可以操作State属性,但在定义方法时,Getters是对State属性进行加工处理,再返回使用,属于内部计算;Action…

基于微信小程序的医院综合服务平台的设计与实现ssm+论文源码调试

4系统概要设计 4.1概述 本系统后台采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原…

基于SpringBoot+vue高效旅游管理系统

Spring Boot后端与Vue前端融合:构建高效旅游管理系统 目录 一、项目简介 二、开发技术与环境配置 2.1 SpringBoot框架 2.2 Java语言简介 2.3 Vue的介绍 2.4 mysql数据库介绍 2.5 B/S架构 三、系统功能实现 四、系统项目截图 登录页面 后台管理页面 用户…

为什么在springboot中使用autowired的时候它黄色警告说不建议使用字段注入

byType找到多种实现类导致报错 Autowired: 通过byType 方式进行装配, 找不到或是找到多个,都会抛出异常 我们在单元测试中无法进行字段注入 字段注入通常是 private 修饰的,Spring 容器通过反射为这些字段注入依赖。然而,在单元测试中&…

在ubuntu下使用ovpn文件连接服务器,并设置开机启动

1. 安装openvpn sudo apt install openvpn2. 将 ovpn 文件拷贝到 /etc/openvpn/client 目录 sudo cp /path/to/your-config.ovpn /etc/openvpn/client/your-config.conf3. 设置开机启动 sudo systemctl enable openvpn-clientyour-config.service4. 启动 sudo systemctl st…

【Elasticsearch】post_filter

post_filter是 Elasticsearch 中的一种后置过滤机制,用于在查询执行完成后对结果进行过滤。以下是关于post_filter的详细介绍: 工作原理 • 查询后过滤:post_filter在查询执行完毕后对返回的文档集进行过滤。这意味着所有与查询匹配的文档都…

10.单例模式 (Singleton Pattern)

单例模式的定义 单例模式(Singleton Pattern) 是一种创建型设计模式,确保一个类在整个程序生命周期中只能有一个实例,并提供一个全局访问点。 特点: 唯一性:保证系统中某个类只能有一个实例。全局访问点…

【算法篇】贪心算法

目录 贪心算法 贪心算法实际应用 一,零钱找回问题 二,活动选择问题 三,分数背包问题 将数组和减半的最小操作次数 最大数 贪心算法 贪心算法,是一种在每一步选择中都采取当前状态下的最优策略,期望得到全局最优…