rust_hello world

常用各类软硬件使用技巧、疑难、最新资讯等相关交流
回复
rungod
帖子: 56
注册时间: 2010-06-19 3:51

rust_hello world

帖子 rungod »

Cargo.toml:

代码: 全选

[package]
name = "hello_world_desktop"
version = "0.1.0"
edition = "2021"

[dependencies]
eframe = "0.27" # 使用了更新的版本

main.rs:

代码: 全选

// src/main.rs
use eframe::{egui, NativeOptions};
use egui::{FontData, FontDefinitions, FontFamily};

fn main() -> Result<(), eframe::Error> {
    let options = NativeOptions {
        viewport: egui::ViewportBuilder::default()
            .with_inner_size(egui::Vec2::new(640.0, 480.0)),
        ..Default::default()
    };

    eframe::run_native(
        "Hello World from Rust",
        options,
        Box::new(|cc| {
            // --- 字体配置开始 ---
            let mut fonts = FontDefinitions::default();

            // 添加支持中文的字体 (以 Windows 为例)
            // 你可以尝试 "Microsoft YaHei" 或 "SimHei"
            // 这里使用 "Microsoft YaHei"
            fonts.font_data.insert(
                "chinese_font".to_owned(),
                FontData::from_static(include_bytes!(r"C:\Windows\Fonts\msyh.ttc")), // 微软雅黑 ttc 文件
                // 或者尝试 SimHei: include_bytes!(r"C:\Windows\Fonts\simhei.ttf")
            );

            // 将新字体添加到字体族映射中
            fonts.families.entry(FontFamily::Proportional).or_default().insert(0, "chinese_font".to_owned());
            fonts.families.entry(FontFamily::Monospace).or_default().insert(0, "chinese_font".to_owned());

            // 将字体设置应用到 egui 上下文
            cc.egui_ctx.set_fonts(fonts);
            // --- 字体配置结束 ---

            // 创建并返回 App 实例,**不使用 Ok 包装**
            Box::new(MyApp::default()) as Box<dyn eframe::App>
        }),
    )
}

#[derive(Default)]
struct MyApp;

impl eframe::App for MyApp {
    fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
        egui::CentralPanel::default().show(ctx, |ui| {
            ui.heading("Hello, World from Rust!");
            ui.label("这是一个简单的 Rust GUI 应用");
            ui.label("现在中文应该可以正常显示了!");
        });
    }
}
效果:
hello_rust.png
心海质水
回复