Hello World App¶
Keywords: iced::Sandbox
, iced::Settings
, iced::widget::text
创建项目¶
首先,创建一个新的 Rust 项目,并添加对iced
库的依赖。
cargo new text-editor
cd text-editor
cargo add iced
此时的main.rs
文件内容如下:
fn main() {
println!("Hello, world!");
}
创建GUI应用¶
iced
的GUI类有Application
和Sandbox
两种。其中Sandbox
是一个简化版的Application
,提供了一些默认的行为。Sandbox
特性包含如下方法:
pub trait Sandbox {
type Message: std::fmt::Debug + Send;
fn new() -> Self;
fn title(&self) -> String;
fn update(&mut self, message: Self::Message);
fn view(&self) -> Element<'_, Self::Message>;
fn theme(&self) -> Theme {
Theme::default()
}
fn style(&self) -> theme::Application {
theme::Application::default()
}
fn scale_factor(&self) -> f64 {
1.0
}
fn run(settings: Settings<()>) -> Result<(), Error>
where
Self: 'static + Sized,
{
<Self as Application>::run(settings)
}
}
为了使用Sandbox
,我们需要实现其中未实现的方法,即Message
、new
、title
、update
和view
。
-
Message
是一个枚举类型,用于定义应用会产生的消息类型,需要实现std::fmt::Debug
和Send
特性。#[derive(Debug)] // Inherit the Debug trait enum Message {} // No message required
-
new
方法用于创建一个新的Sandbox
实例,初始化实例状态,一般情况下直接返回Self
即可。fn new() -> Self { Self }
-
title
方法用于返回GUI窗口的标题。fn title(&self) -> String { String::from("A text editor") }
-
update
方法和view
方法共同组成应用的消息循环:update
方法用于处理消息,更新应用状态,view
方法用于在状态更新后更新应用界面。此处我们在view
方法中放置一个文本控件。fn update(&mut self, message: Self::Message) { match message { // No message to handle } } fn view(&self) -> Element<'_, Self::Message> { text("Hello, world!").into() }
通过Sandbox::run
方法启动应用,该方法返回Result<(), Error>
类型,可以直接作为main
函数的返回值。
以下为完整的main.rs
文件内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|