【rust/egui】(二)看看template的main函数:日志输出以及eframe run_native

说在前面

  • rust新手,egui没啥找到啥教程,这里自己记录下学习过程
  • 环境:windows11 22H2
  • rust版本:rustc 1.71.1
  • egui版本:0.22.0
  • eframe版本:0.22.0
  • 上一篇:这里

开始

  • 首先让我们看看main.rs中有些什么

    rust 复制代码
    #![warn(clippy::all, rust_2018_idioms)]
    #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] 
    // 在release模式中隐藏控制台窗口(实际上我怎么试也没找到这个窗口) 本文放弃关注
    
    // 非wasm架构
    #[cfg(not(target_arch = "wasm32"))]
    fn main() -> eframe::Result<()> {
        env_logger::init(); // 初始化log参数,debug模式下仅会打印error日志
    
        let native_options = eframe::NativeOptions::default(); // 初始化eframe默认参数
        eframe::run_native(
            "demo app",
            native_options,
            Box::new(|cc| Box::new(demo_app::TemplateApp::new(cc))),
        )
        // 启动eframe
    }
    
    // When compiling to web using trunk:
    #[cfg(target_arch = "wasm32")]
    // ... 本文暂不关注wasm相关内容

日志输出

  • eframe中使用的日志库为log以及env_logger,其日志等级有5个:

    rust 复制代码
    pub enum Level {
        Error,
        Warn,
        Info,
        Debug,
        Trace,
    }
  • 我们可以在main函数中添加测试一下:

    rust 复制代码
    fn main() -> eframe::Result<()> {
        env_logger::init(); 
        // Log to stderr (if you run with `RUST_LOG=debug`).
    
        log::info!("1");
        log::warn!("2");
        log::error!("3");
        log::trace!("4");
        log::debug!("5");
    
        // ...
    }
  • 执行cargo run,只能看到error输出;使用cargo run --release的话什么日志都没有了

    shell 复制代码
    [2023-08-13T09:20:59Z ERROR demo_app] 3
  • env_logger可以指定日志输出的级别以及目标,当我们在cmd下执行(注意powershell的设置环境变量的语法不一样):

    shell 复制代码
    set RUST_LOG=demo_app
    cargo run

    这会将我们的项目(demo_app)下所有的级别的log进行输出,现在我们能看到所有级别的日志了

    shell 复制代码
    [2023-08-13T09:27:18Z INFO  demo_app] 1
    [2023-08-13T09:27:18Z WARN  demo_app] 2
    [2023-08-13T09:27:18Z ERROR demo_app] 3
    [2023-08-13T09:27:18Z TRACE demo_app] 4
    [2023-08-13T09:27:18Z DEBUG demo_app] 5
  • 现在我们尝试下将eframe的日志都输出:

    shell 复制代码
    set RUST_LOG=eframe
    cargo run

    可以看到大量的日志输出:

    shell 复制代码
    [2023-08-13T09:31:29Z DEBUG eframe] Using the glow renderer
    [2023-08-13T09:31:29Z DEBUG eframe::native::run] Entering the winit event loop (run_return)...

eframe初始化参数

  • 在main函数中调用eframe::run_native()时使用到了一个native_options,让我们看看这里面有些什么:

    shell 复制代码
    always_on_top: bool
    Sets whether or not the window will always be on top of other windows at initialization.
    
    maximized: bool
    Show window in maximized mode
    
    decorated: bool
    On desktop: add window decorations (i.e. a frame around your app)? 
    If false it will be difficult to move and resize the app.
    
    fullscreen: bool
    Start in (borderless) fullscreen?
    
    ...
  • 我们可以试着改几个看看效果

    • always_on_top

      rust 复制代码
      let mut native_options = eframe::NativeOptions::default();
      native_options.always_on_top = true;
    • decorated

      rust 复制代码
      let mut native_options = eframe::NativeOptions::default();
          native_options.always_on_top = true;
          native_options.decorated = false;


      毫无灵魂了,甚至和背景融为一体了

    • transparent

      rust 复制代码
      let mut native_options = eframe::NativeOptions::default();
          native_options.transparent = true;
      // 同时注释掉app.rs中 egui::CentralPanel::default() 代码
  • 其他详细参数见这里,大家可以自己试试

eframe::run_native

  • 调用该函数创建我们的应用窗口,其定义为:

    rust 复制代码
    pub fn run_native(
        app_name: &str, // 应用名
        native_options: NativeOptions, // 初始化选项
        app_creator: AppCreator // 应用主逻辑
    ) -> Result<()>
  • app_name
    应用名称,在我们的例子中为demo app;同时该值也是我们的窗口显示的名称,同时也是持久化存储(下一节看看 )目录的名称;

相关参考

相关推荐
执风挽^4 小时前
Python基础编程题2
开发语言·python·算法·visual studio code
程序员泠零澪回家种桔子4 小时前
Spring AI框架全方位详解
java·人工智能·后端·spring·ai·架构
Z9fish4 小时前
sse哈工大C语言编程练习20
c语言·开发语言·算法
萧鼎4 小时前
Python 包管理的“超音速”革命:全面上手 uv 工具链
开发语言·python·uv
源代码•宸5 小时前
大厂技术岗面试之谈薪资
经验分享·后端·面试·职场和发展·golang·大厂·职级水平的薪资
Anastasiozzzz5 小时前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
刘琦沛在进步5 小时前
【C / C++】引用和函数重载的介绍
c语言·开发语言·c++
机器视觉的发动机5 小时前
AI算力中心的能耗挑战与未来破局之路
开发语言·人工智能·自动化·视觉检测·机器视觉
HyperAI超神经5 小时前
在线教程|DeepSeek-OCR 2公式/表格解析同步改善,以低视觉token成本实现近4%的性能跃迁
开发语言·人工智能·深度学习·神经网络·机器学习·ocr·创业创新
晚霞的不甘5 小时前
CANN 编译器深度解析:UB、L1 与 Global Memory 的协同调度机制
java·后端·spring·架构·音视频