【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;同时该值也是我们的窗口显示的名称,同时也是持久化存储(下一节看看 )目录的名称;

相关参考

相关推荐
tealcwu7 分钟前
【游戏设计原理】32 - 消费者剩余
java·开发语言·游戏
小马爱打代码16 分钟前
Spring Boot项目开发常见问题及解决方案(下)
java·spring boot·后端
潜意识起点18 分钟前
计算机专业文献检索期末论文
java·开发语言
Tiger Z27 分钟前
R 语言科研绘图第 11 期 --- 柱状图-基础
开发语言·程序人生·r语言·贴图
岁月如歌,青春不败29 分钟前
R语言森林生态系统结构、功能与稳定性分析与可视化
开发语言·人工智能·python·深度学习·r语言
Q_19284999061 小时前
基于Spring Boot的工商局商家管理系统
java·spring boot·后端
Godlovesea1 小时前
ubuntu控制器多网口配置
开发语言·php
web136885658712 小时前
rust教程 第一章 —— 初识rust
开发语言·后端·rust
songroom2 小时前
Rust : tokio中select!
开发语言·后端·rust
dubochao_xinxi2 小时前
QT5 在某些系统出现qt.qpa.xcb: could not connect
开发语言·qt