it编程 > 编程语言 > rust

Rust+Slint 实现左右伸缩式图片浏览器源码分享(最新)

36人参与 2026-09-07 rust

一、效果展示

二、源码分享

1、工程结构

2、main.rs

slint::include_modules!();
fn main() -> result<(), slint::platformerror> {
    let main_window = mainwindow::new()?;
    main_window.run()
}

3、build.rs

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

4、main.slint

component accordioncard inherits rectangle {
    in property <image> source;
    border-radius: 5px;
    clip: true;
    min-width: 50px;
    preferred-width: 0px;
    background: #646464;
    ta := toucharea {
        width: 100%;
        height: 100%;
    }
    // 动画拉伸属性:悬停时从 1 平滑过渡到 5
    property <float> my-stretch: ta.has-hover ? 5.0 : 1.0;
    animate my-stretch { duration: 280ms; easing: ease-out; }
    horizontal-stretch: my-stretch;
    image {
        source: root.source;
        width: 100%;
        height: 100%;
        image-fit: cover;
    }
}
export component mainwindow inherits window {
    preferred-width: 900px;
    preferred-height: 500px;
    title: "伸缩式图片浏览器";
    background: #34495e;
    horizontallayout {
        spacing: 5px;
        padding-left: 10px;
        padding-right: 10px;
        padding-top: 10px;
        padding-bottom: 10px;
        for img in [
            @image-url("../images/apple.svg"),
            @image-url("../images/banana.svg"),
            @image-url("../images/mango.svg"),
            @image-url("../images/peach.svg"),
            @image-url("../images/strawberry.svg"),
            @image-url("../images/watermelon.svg"),
        ] : accordioncard {
            source: img;
        }
    }
}

5、cargo.toml

[package]
name = "sokoban"
version = "0.1.0"
edition = "2024"
[dependencies]
slint = "1.16.1"
[build-dependencies]
slint-build = "1.16.1"

三、实现原理

本项目的核心是利用 slint ui 框架 的声明式语法和动画系统,结合 rust 的高性能特性,实现一个具有悬停伸缩效果的图片浏览器。其实现原理可分为以下几个关键部分:

1、 组件化设计:accordioncard

main.slint 文件中,我们定义了一个可复用的 accordioncard 组件,它继承自 rectangle。这是整个效果的核心载体。

2、主窗口与动态布局

mainwindow 组件是应用的根窗口。

3、 rust 后端与构建流程

rust 代码 (main.rs) 非常简洁,体现了 slint 框架“声明式ui,逻辑与呈现分离”的特点。

4、 技术要点总结

  1. 声明式与响应式:整个ui效果完全在 .slint 文件中通过声明属性、绑定和动画完成,无需编写冗长的命令式布局或动画代码。
  2. 属性绑定与动画系统:利用 propertyanimate 关键字,轻松实现了状态(悬停)到样式(宽度)的响应式绑定与平滑过渡。
  3. 布局引擎的灵活性horizontallayouthorizontal-stretch 属性的配合,使得实现这种动态伸缩布局变得非常简单。
  4. 高效的 rust 集成:编译时处理 ui 定义,保证了运行时的性能,同时享受 rust 的安全性与生态。

通过以上机制,我们仅用百行左右的代码,就实现了一个视觉效果流畅、交互自然的伸缩式图片浏览器。

到此这篇关于rust+slint 实现左右伸缩式图片浏览器源码分享(最新)的文章就介绍到这了,更多相关rust slint 左右伸缩式图片浏览器内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

Rust suppaftp 库详解:基于 FTP 客户端实战指南

09-13

Rust语言的模块源码组织和单元测试详解

08-27

如何用Ansible部署Nginx到多台服务器?Ansible、Playbook从安装到验证实战

08-23

RustDesk迁移到HarmonyOS鸿蒙PC怎么做?完整NativeHAR适配实战教程

08-23

云服务器时间与本地或标准时间不一致的解决方法

08-07

在Ubuntu/Debian系统自建RustDesk私有服务器全攻略

08-07

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论