当前位置: 首页 > news >正文

【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中有些什么
    #![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个:
    pub enum Level {Error,Warn,Info,Debug,Trace,
    }
    
  • 我们可以在main函数中添加测试一下:
    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的话什么日志都没有了
    [2023-08-13T09:20:59Z ERROR demo_app] 3
    
  • env_logger可以指定日志输出的级别以及目标,当我们在cmd下执行(注意powershell的设置环境变量的语法不一样):
    set RUST_LOG=demo_app
    cargo run
    
    这会将我们的项目(demo_app)下所有的级别的log进行输出,现在我们能看到所有级别的日志了
    [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的日志都输出:
    set RUST_LOG=eframe
    cargo run
    
    可以看到大量的日志输出:
    [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,让我们看看这里面有些什么:

    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 modedecorated: 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
      let mut native_options = eframe::NativeOptions::default();
      native_options.always_on_top = true;
      
      在这里插入图片描述
    • decorated
      let mut native_options = eframe::NativeOptions::default();native_options.always_on_top = true;native_options.decorated = false;
      
      在这里插入图片描述
      毫无灵魂了,甚至和背景融为一体了
    • transparent
      let mut native_options = eframe::NativeOptions::default();native_options.transparent = true;
      // 同时注释掉app.rs中 egui::CentralPanel::default() 代码
      
      在这里插入图片描述
  • 其他详细参数见这里,大家可以自己试试

eframe::run_native

  • 调用该函数创建我们的应用窗口,其定义为:
    pub fn run_native(app_name: &str, // 应用名native_options: NativeOptions, // 初始化选项app_creator: AppCreator // 应用主逻辑
    ) -> Result<()>
    
  • app_name
    应用名称,在我们的例子中为demo app;同时该值也是我们的窗口显示的名称,同时也是持久化存储(下一节看看 )目录的名称;
    在这里插入图片描述
    在这里插入图片描述

相关参考

  • log
  • env_logger
  • log无法单独使用
http://www.lryc.cn/news/122617.html

相关文章:

  • Eigen在QT中的配置
  • 微服务04-elasticsearch
  • uniapp 微信小程序 订阅消息
  • JDK8日期时间工具类
  • 智汇云舟入选IDC《中国智慧城市数字孪生技术评估,2023》报告
  • 《Zookeeper》源码分析(九)之选举通信网络
  • JVM——栈和堆概述,以及有什么区别?
  • 恒盛策略:沪指冲高回落跌0.26%,酿酒、汽车等板块走弱,燃气股拉升
  • Mongodb 常用操作
  • 【python】-【】
  • 基于Elman神经网络的电力负荷预测
  • LeetCode 0088. 合并两个有序数组
  • 定义行业新标准?谷歌:折叠屏手机可承受20万次折叠
  • 在vscode中配置C/C++环境GCC on Linux
  • windows执行完LoadLibrary()后,可以删除源动态库文件,函数不会锁库文件
  • ios 知识
  • 8 | 美国航班数据分析
  • app.use(express.json()) 使用
  • 基于PyTorch的图像识别
  • js合并数组对象(将数组中具有相同属性对象合并到一起,组成一个新的数组)
  • Spring BeanPostProcessor 接口的作用和使用
  • Android 13 Hotseat定制化修改——006 hotseat图标禁止移动到Launcher中
  • RabbitMQ 发布确认机制
  • 微信小程序使用rich-text解析富文本字符串的时候,遇到image标签图片很大超过屏幕
  • 使用IIS服务器部署Flask python Web项目
  • sentinel核心流程源码解析
  • 中睿天下Coremail | 2023年第二季度企业邮箱安全态势观察
  • 桶排序-1184:明明的随机数
  • Spring Boot中整合Keycloak OpenID Connect(OIDC)
  • 如何使用Mac终端给树莓派pico构建C/C++程序进行开发,以及遇到各种问题该怎么处理,不使用任何IDE或编辑器(例如VS Code)