Rust UI开发(一):使用iced构建UI时,如何在界面显示中文字符

注:此文适合于对rust有一些了解的朋友

iced是一个跨平台的GUI库,用于为rust语言程序构建UI界面。
在这里插入图片描述  
iced的基本逻辑是:
UI交互产生消息message,message传递给后台的update,在这个函数中编写逻辑,然后通过View函数更新UI。

  1. Take the result of our view logic and layout its widgets.
    获取视图逻辑的结果并布局其小部件。
  2. Process events from our system and produce messages for our update
    logic. 处理来自系统的事件,并为我们的更新逻辑生成消息。
  3. Draw the resulting user interface. 绘制生成的用户界面。

下面我们将通过举例来说明iced如何显示一个窗口,以及如何在窗口上显示中文。

一、如何用iced构建窗口:

我们构建一个基本窗口,窗口有一个按钮,一个文本框,一个标签,在文本框输入字符,点击按钮后,标签上显示相同内容。
UI实例预览:
在这里插入图片描述
在这里插入图片描述
1 导入库

use iced::widget::{
   button, column, text, text_input};    
use iced::{
   Alignment, Element, Sandbox, Settings};

2、配置Cargo.toml

[dependencies]   
iced="0.10"

这样,使用cargo check时,会自动安装iced库。

3、构建窗口程序

主函数:

pub fn main() -> iced::Result {
        

    Counter::run(Settings::default())             //此处为使用默认窗口设置
  
}

定义数据结构:

//创建结构体struct
struct Counter{
   
    value: String,
    value2:String,
}

定义消息:

#[derive(Debug, Clone)]           //为下方的enum添加特性trait
enum Message {
   
    Showtext,
    InputChanged(String),
}

实现一个实例:

//sandbox是一个trait
impl Sandbox for Counter {
                //impl将sandbox添加给Counter,使Counter具有了sandbox的一些特性
    type Message = Message;     
    fn new() -> Self {
                     //初始化sandbox,返回初始值
        Self {
    
            value: String::new(),
            value2:String::new(),
        }
    }

    fn title(&self) -> String {
            //返回sandbox的标题
        String::from("iced_UI")
    }

    fn update(&mut self, message: Message) {
           //此处书写更新逻辑程序,所有UI交互会在这里处理
     
  • 17
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Rust的std::future是一种表示异步操作结果的类型,它可以在不阻塞线程的情况下等待异步操作完成,并返回结果。下面是使用std::future的基本步骤: 1. 导入future模块:在代码文件的开头添加“use std::future::Future;”语句。 2. 创建异步任务:创建一个异步任务,例如使用async语法创建一个异步函数,返回值类型为Future。 3. 等待异步任务:使用await关键字等待异步任务完成,并获取结果。 下面是一个简单的例子: ```rust use std::future::Future; async fn async_task() -> i32 { 1 + 2 } fn main() { let future = async_task(); // 创建异步任务 let result = futures::executor::block_on(future); // 等待异步任务完成 println!("Result: {}", result); // 打印结果 } ``` 在这个例子中,我们创建了一个异步函数async_task(),返回一个Future,表示一个异步操作。在main函数中,我们调用async_task()创建一个异步任务,并使用futures::executor::block_on()函数等待异步任务完成,并获取结果。最后打印结果。 需要注意的是,使用block_on函数会阻塞当前线程,直到异步任务完成。为了避免阻塞线程,可以使用异步运行(async runtime)来执行异步任务。Rust提供了多个异步运行,例如tokio、async-std、smol等。下面是使用tokio的例子: ```rust use std::future::Future; use tokio::runtime::Runtime; async fn async_task() -> i32 { 1 + 2 } fn main() { let future = async_task(); // 创建异步任务 let mut rt = Runtime::new().unwrap(); // 创建异步运行 let result = rt.block_on(future); // 在异步运行中执行异步任务 println!("Result: {}", result); // 打印结果 } ``` 在这个例子中,我们使用tokio创建了一个异步运行,并使用run_until_complete()函数在异步运行中执行异步任务。这样可以避免阻塞线程,提高程序性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机构师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值