• [Rust GUI]0.10.0版本iced代码示例 - progress_bar


    -1 字体支持

    iced0.10.0 仅支持指定系统内置字体(iced默认字体中文会乱码)
    iced0.10.0 手动加载字体的功能已经砍了,想手动加载就用0.9.0版本,文档0.9.0版本
    想显示中文则需要运行在一个自带字体的Windows系统上。而且这个字体最好不要钱。
    (Windows闲着没事不会给你放免费字体进去,都是微软自己买的,只能微软用)

    如果选用的字体用户的电脑里恰好没有,iced就直接乱码给你看。
    https://blog.csdn.net/qq_39124701/article/details/132662186

    0、准备

    1、安装Visual Studio C++ Build tools

    1、访问微软官网下载生成工具
    2、勾选这个
    https://blog.csdn.net/qq_39124701/article/details/132662186
    3、对比勾选细节
    https://blog.csdn.net/qq_39124701/article/details/132662186
    4、点击安装
    5、安装完成
    https://blog.csdn.net/qq_39124701/article/details/132662186
    6、关闭Visual Studio Installer
    7、重启电脑

    2、安装Rust

    访问Rust官网下载 RUSTUP-INIT.EXE(64位)
    在 PowerShell 中运行$ENV:RUSTUP_DIST_SERVER='https://mirrors.ustc.edu.cn/rust-static';$ENV:RUSTUP_UPDATE_ROOT='https://mirrors.ustc.edu.cn/rust-static/rustup';.\rustup-init.exe,输入1并回车
    https://blog.csdn.net/qq_39124701/article/details/132662186

    3、设置cargo镜像

    运行powershell -command ii (where.exe cargo).substring(0,(where.exe cargo).Length-'\bin\cargo.exe'.Length)
    .cargo目录下新建文件,名为config,无后缀名,保存为以下内容

    [source.crates-io]
    registry = "https://github.com/rust-lang/crates.io-index"
    replace-with = 'ustc'
    [source.ustc]
    registry = "git://mirrors.ustc.edu.cn/crates.io-index"
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4、安装VSCode

    访问这个👉链接:如何下载安装VSCode
    安装插件:简体中文rust-analyzer(中英双语版)

    5、下载并安装字体文件

    下载思源黑体:下载链接
    双击 SourceHanSansSC-Regular.otf 文件,点击安装

    0、编程

    1、使用cargo创建项目

    运行cargo new iced-progress_bar;cd iced-progress_bar

    2、添加板条箱iced0.10.0

    运行cargo add iced@0.10.0

    3、使用VSCode打开项目

    运行code .
    选中.\iced-progress_bar\src\main.rs激活插件,等待插件加载完毕。

    4、运行

    运行cargo run,等待编译完成,正常输出Hello, world!
    https://blog.csdn.net/qq_39124701/article/details/132662186

    5、编辑.\iced-progress_bar\src\main.rs

    5.1、use

    编辑第一部分,使用use关键字添加板条箱iced

    // https://blog.csdn.net/qq_39124701/article/details/132662186
    use iced::font::{Family, Weight};
    use iced::widget::{button, column, progress_bar, slider, text};
    use iced::{window, Element, Font, Sandbox, Settings};
    
    • 1
    • 2
    • 3
    • 4

    5.2、Progress

    编辑第二部分,添加一个结构体

    #[derive(Default)]
    struct Progress {
        value: f32,
    }
    
    • 1
    • 2
    • 3
    • 4

    5.3、Message

    编辑第二部分,添加一个枚举

    #[derive(Debug, Clone, Copy)]
    enum Message {
        SliderChanged(f32),
        RunCommand,
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    请添加图片描述

    5.4、impl

    5.4.1、编辑第三部分,定义方法

    impl Sandbox for Progress {}
    
    • 1

    5.4.2、鼠标选中该行代码,点击灯泡图标,选择Implement missing members并保存
    https://blog.csdn.net/qq_39124701/article/details/132662186
    5.4.3、将会自动生成如下代码

    impl Sandbox for Progress {
        type Message;
    
        fn new() -> Self {
            todo!()
        }
    
        fn title(&self) -> String {
            todo!()
        }
    
        fn update(&mut self, message: Self::Message) {
            todo!()
        }
    
        fn view(&self) -> Element<'_, Self::Message> {
            todo!()
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    5.4.4、type Message
    type Message;改为type Message = Message;
    5.4.5、new()

        fn new() -> Self {
            todo!()
        }
    
    • 1
    • 2
    • 3

    改为

        fn new() -> Self {
            Self::default()
        }
    
    • 1
    • 2
    • 3

    5.4.6、title()

        fn title(&self) -> String {
            todo!()
        }
    
    • 1
    • 2
    • 3

    改为

        fn title(&self) -> String {
            String::from("进度条 - Iced")
        }
    
    • 1
    • 2
    • 3

    5.4.7、update()

        fn update(&mut self, message: Self::Message) {
            todo!()
        }
    
    • 1
    • 2
    • 3

    改为

        fn update(&mut self, message: Message) {
            match message {
                Message::SliderChanged(x) => self.value = x,
                Message::RunCommand => {
                    std::process::Command::new("cmd")
                        .args(&["/C", "start", "", "https://blog.csdn.net/qq_39124701/article/details/132662186"])
                        .spawn()
                        .expect("Failed to open URL");
                }
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    5.4.8、view()

        fn view(&self) -> Element<'_, Self::Message> {
            todo!()
        }
    
    • 1
    • 2
    • 3

    改为

        fn view(&self) -> Element<Message> {
            // https://blog.csdn.net/qq_39124701/article/details/132662186
            column![
                text(self.value).size(50),
                progress_bar(0.0..=100.0, self.value),
                slider(0.0..=100.0, self.value, Message::SliderChanged).step(0.01),
                button("重置为零").on_press(Message::SliderChanged(0.0)),
                button("作者:CSDN 三巧").on_press(Message::RunCommand),
            ]
            .padding(20)
            .spacing(5)
            .into()
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    5.5、main

    fn main() {
        println!("Hello, world!");
    }
    
    • 1
    • 2
    • 3

    改为

    pub fn main() -> iced::Result {
        Progress::run(Settings {
            window: window::Settings {
                size: (500, 500),
                ..Default::default()
            },
            default_font: Font {
                family: Family::Name("思源黑体"),
                weight: Weight::Normal,
                ..Default::default()
            },
            ..Default::default()
        })
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    6、运行

    运行cargo run,等待编译完成,显示窗口
    https://blog.csdn.net/qq_39124701/article/details/132662186
    滑动滑块,数字变化,进度条变化
    点击重置为零按钮,数字归零,进度条归零

    7、构建

    cargo build
    生成位置:.\iced-progress_bar\target\debug\iced-progress_bar.exe

    8、exe运行有黑框?

    编辑.\iced-progress_bar\src\main.rs,在第一行添加#![windows_subsystem = "windows"]后重新构建即可

    9、其他

    iced官网
    crates.io中的iced
    Github上的iced



    logo

  • 相关阅读:
    制作翻页电子书最简单的教程来也!
    JS 事件
    MMoE: 基于多门专家混合的多任务学习任务关系建模
    阿里云服务器(Ubuntu22)上的MySQL8更改为大小写不敏感
    【广州华锐互动】VR高层火灾应急疏散演练提供一种无风险的逃生体验
    linux内核整体架构
    springcloudalibaba架构(7):Sentinel授权规则和系统规则
    单源广度优先搜索 (leetcode经典例题 C++实现)
    【大二Web课程设计】基于HTML+CSS技术制作抗疫感动专题网页设计
    懒羊羊闲话1
  • 原文地址:https://blog.csdn.net/qq_39124701/article/details/132662186