大家好,我是小羊,Rust爱好者, 一生只爱一门语言,那便是Rust语言 。
欢迎大家关注我的公众号「Rust开发笔记」,分享最新的 Rust 语言动态、教程、最佳实践以及实用技巧。
在上篇文章 里,我介绍了Relm 框架,作为Rust生态中的一员,提供了一种声明式、事件驱动的方法来构建GUI,深入探究了relm的设计理念、特性以及应用实例,为广大Rust爱好者开启了构建跨平台GUI应用的新篇章。
同时,我也发起了一个 「 Rust GUI框架你了解多少? 」 的投票,通过目前的投票结果来看,排在前三的GUI框架分别是 Slint、egui、Dioxus。
往期文章已经介绍过排名前三的GUI框架:
Slint:
egui:
Dioxus:
今天我将介绍下排名第四的 Iced GUI框架。
在 Rust 社区中,Iced 是值得关注的跨平台 GUI (图形用户界面) 库之一。由
iced-rs
团队开发,Iced的设计灵感来源于 Elm 语言,它以简洁性和类型安全性为特色,旨在提供一个简单易用且功能丰富的 GUI 开发体验。本文将深入探讨 Iced,并提供详尽的示例和教学,希望帮助读者更好地理解和使用这个库。
Iced 的核心特性
Iced 专注于以下几个核心特性:
简洁易用的 API :提供了一套结构清晰的 API,便于快速上手和开发。
类型安全的反应式编程模型 :利用 Rust 强大的类型系统,确保了代码的安全性。
跨平台支持 :同时支持 Windows, macOS, Linux, 以及 Web 平台。
响应式布局 :易于创建灵活且自适应的用户界面。
内置控件 :包含丰富的预制控件供开发者使用。
自定义控件支持 :允许开发者根据需求创建定制的控件。
调试叠加层 :内置性能度量工具,方便开发者进行性能调试。
使用 Iced 构建你的第一个 Rust 应用
要开始使用 Iced 构建 GUI 应用,你需要首先确保 Rust 的开发环境已经搭建好。接下来,我们将逐步构建一个简单的应用来展示 Iced 的用法。
第一步:创建项目并添加依赖
打开终端,使用以下命令创建一个新的 Rust 项目:
cargo new my_iced_app
cd my_iced_app
然后,打开
Cargo.toml
文件,添加 Iced 库作为依赖:
[dependencies]
iced = "0.4"
第二步:编辑 main.rs
接下来,我们将编写应用的主逻辑。编辑
src/main.rs
文件,填入以下代码:
use iced::{Application, Button, Column, Command, Element, Sandbox, Settings, Text};
pubfnmain() -> iced::Result {
Counter::run(Settings::default())
}
structCounter {
value: i32,
increment_button: Button,
decrement_button: Button,
}
#[derive(Debug, Clone, Copy)]
enumMessage {
IncrementPressed,
DecrementPressed,
}
impl Sandbox for Counter {
typeMessage = Message;
fnnew() -> Self {
Counter {
value: 0,
increment_button: Button::new(),
decrement_button: Button::new(),
}
}
fntitle(&self) -> String {
String::from("Iced Counter Example")
}
fnupdate(&mutself, message: Message) -> Command<Message> {
match message {
Message::IncrementPressed => self.value += 1,
Message::DecrementPressed => self.value -= 1,
}
Command::none()
}
fnview(&mutself) -> Element<Message> {
Column::new()
.push(
Button::new(&mutself.increment_button, Text::new("Increment"))
.on_press(Message::IncrementPressed),
)
.push(
Button::new(&mutself.decrement_button, Text::new("Decrement"))
.on_press(Message::DecrementPressed),
)
.push(Text::new(self.value.to_string()))
.into()
}
}
第三步:运行你的第一个 Iced 应用
保存
main.rs
文件后,运行以下命令,编译并启动 GUI 应用:
cargo run
应用启动后,你会看到一个简单的计数器界面,界面上有「Increment」和「Decrement」两个按钮用于增减计数值。
扩展:创建响应式布局和自定义控件
Iced 不仅限于创建基础的控件和布局,你还可以利用响应式布局创建复杂且自适应的界面。此外,自定义控件可以让你的应用更加吸引人,下面我们来看一个自定义控件的例子:
use iced::{button, Button, Column, Command, Element, Sandbox, Settings, Text};
// 定义你的自定义控件
structMyCustomWidget {
// 控件内部的状态和属性
}
// 实现自定义控件的逻辑
impl MyCustomWidget {
// 创建控件的新实例
fnnew() -> Self {
// 初始化控件状态
}
// 实现控件的渲染逻辑
fnview(&mutself) -> Element<Message> {
// 返回 Element 类型的 GUI 表示
}
}
// 后续类似于 Counter 示例的结构和实现逻辑
在这段代码中,我们定义了一个
MyCustomWidget
控件,并为它实现了基础的构建和渲染逻辑。这就是 Iced 灵活性的一种体现,允许你根据具体的应用需求进行定制。
结语
通过本文的介绍,你应该对 Iced 有了基本的了解。Iced 以其简洁的 API、强类型设计和跨平台特性,为 Rust GUI 开发提供了一个非常有吸引力的选项。你还可以在它的 GitHub 页面上找到更多的信息、文档和示例,以及如何为这个开源项目做出贡献。如果你对 GUI 开发感兴趣,Iced 是一个学习和实践的好起点。不要犹豫,开始你的 Rust GUI 之旅吧!
文章精选
点 击 关 注 并 扫 码 添 加 进 交 流 群
领
取
「Rust
语
言
」
学
习
资
料
关注公众号并回复 「Iced」 立即获取项目地址。