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

这篇具有很好参考价值的文章主要介绍了【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 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
      let mut native_options = eframe::NativeOptions::default();
      native_options.always_on_top = true;
      
      【rust/egui】(二)看看template的main函数:日志输出以及eframe run_native,Rust,rust,开发语言,后端
    • decorated
      let mut native_options = eframe::NativeOptions::default();
          native_options.always_on_top = true;
          native_options.decorated = false;
      
      【rust/egui】(二)看看template的main函数:日志输出以及eframe run_native,Rust,rust,开发语言,后端
      毫无灵魂了,甚至和背景融为一体了
    • transparent
      let mut native_options = eframe::NativeOptions::default();
          native_options.transparent = true;
      // 同时注释掉app.rs中 egui::CentralPanel::default() 代码
      
      【rust/egui】(二)看看template的main函数:日志输出以及eframe run_native,Rust,rust,开发语言,后端
  • 其他详细参数见这里,大家可以自己试试文章来源地址https://www.toymoban.com/news/detail-646592.html

eframe::run_native

  • 调用该函数创建我们的应用窗口,其定义为:
    pub fn run_native(
        app_name: &str, // 应用名
        native_options: NativeOptions, // 初始化选项
        app_creator: AppCreator // 应用主逻辑
    ) -> Result<()>
    
  • app_name
    应用名称,在我们的例子中为demo app;同时该值也是我们的窗口显示的名称,同时也是持久化存储(下一节看看 )目录的名称;
    【rust/egui】(二)看看template的main函数:日志输出以及eframe run_native,Rust,rust,开发语言,后端
    【rust/egui】(二)看看template的main函数:日志输出以及eframe run_native,Rust,rust,开发语言,后端

相关参考

  • log
  • env_logger
  • log无法单独使用

到了这里,关于【rust/egui】(二)看看template的main函数:日志输出以及eframe run_native的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【rust/egui】(三)看看template的app.rs:序列化、持久化存储

    rust新手,egui没啥找到啥教程,这里自己记录下学习过程 环境:windows11 22H2 rust版本:rustc 1.71.1 egui版本:0.22.0 eframe版本:0.22.0 上一篇:这里 app.rs 中首先定义了我们的 TemplateApp 结构体 在定义 TemplateApp 时,我们让其继承了 serde::Deserialize, serde::Serialize 。 serde 是rust中用于序列

    2024年02月11日
    浏览(29)
  • 【rust/egui】(一)从编译运行template开始

    rust新手,egui没啥找到啥教程,这里自己记录下学习过程 环境:windows11 22H2 rust版本:rustc 1.71.1 egui版本:0.22.0 eframe版本:0.22.0 rust windows安装参考:这里 本文默认读者已安装相关环境(git、vscode等) egui github demo online 关于 immediate mode wikipedia microsoft learn 先 clone 下这个项目(也可

    2024年02月13日
    浏览(27)
  • Rust main 函数返回值类型不能是 String

    是的,Rust 的 main 函数返回值类型不能是 String 。 Rust 的 main 函数只能返回以下几种类型之一: () :表示空类型,不返回任何值。 i32 :表示程序的退出码,通常非零值表示执行失败,0 表示执行成功。 std::process::ExitCode :是一个枚举类型,包含成功和失败两种情况。 实现了

    2024年02月03日
    浏览(35)
  • RUST egui部署到github

    接上文,当用trunk serve编译部署后,工程目录下就会有一个dist目录,这个目录就是用来部署用的。 :) 创建一个github repo,这个repo的名称有固定格式要求,就是你自己的用户名+github.io,比如我的用户名是crazyskady,那么这个repo就叫crazyskady.github.io 部署就简单了,先把自己的

    2024年03月21日
    浏览(36)
  • Rust图形界面:从零开始创建eGUi项目

    egui系列:初步 首先,用cargo创建一个新项目,并添加eframe 尽管默认创建的项目只实现了输出Hello world功能,但添加了eframe库,所以下载需要一点时间。 创建成功后,直接把下面的代码写入main.rs文件中,这些代码来自egui的hello_world示例。 然后运行cargo run,结果如下所示 在e

    2024年02月01日
    浏览(46)
  • [Rust GUI]eframe(egui框架)代码示例

    你可以使用egui的其他绑定,例如:egui-miniquad,bevy_egui,egui_sdl2_gl 等。 egui库相当于核心库,需要借助eframe框架写界面。 eframe使用egui_glow渲染,而egui_glow需要opengl2.0+。 1、访问微软官网下载生成工具 2、勾选这个 3、对比勾选细节 4、点击安装 5、安装完成 6、关闭 Visual Studio

    2024年02月08日
    浏览(35)
  • C语言:写一个函数,求字符串的长度,在main函数中输入字符串并输出其长度(指针)

    分析:    在程序中,定义一个函数 fix,该函数使用指针变量来访问字符串中的每个字符,并计算出字符串的长度。fix 函数的参数为指向 char 类型的指针变量 p,表示需要计算长度的字符串。   在主函数 main 中,定义一个大小为 20 的字符数组 a,用于存储输入的字符串。然

    2024年01月21日
    浏览(47)
  • 【rust/egui】(十)使用painter绘制一些图形—connections

    rust新手,egui没啥找到啥教程,这里自己记录下学习过程 环境:windows11 22H2 rust版本:rustc 1.71.1 egui版本:0.22.0 eframe版本:0.22.0 上一篇:这里 在上一节我们使用 painter 绘制了一个可以拖拽的小方块,现在我们来用 painter 将两个小方块连接起来,类似这种: 首先我们需要在我们

    2024年02月09日
    浏览(29)
  • 【Rust日报】2023-02-14 Rust GUI 框架对比: Tauri vs Iced vs egui

    Rust GUI 框架对比: Tauri vs Iced vs egui Tauri:使用系统的 webview 来渲染 HTML/JS 的前端。你可以选择任何前端框架。后台是用Rust编写的,可以通过内置的方法与前台通信。 Iced: 受 Elm 启发的(响应式)GUI库。在桌面上使用 wgpu 进行渲染;实验性的web后端创建DOM进行渲染。所有代码

    2024年02月02日
    浏览(25)
  • 【rust/egui】(八)使用panels给你的应用划分功能区块

    rust新手,egui没啥找到啥教程,这里自己记录下学习过程 环境:windows11 22H2 rust版本:rustc 1.71.1 egui版本:0.22.0 eframe版本:0.22.0 上一篇:这里 panel 是ui上的一块区域,比如我们打开CSDN的markdown编辑器,它大致上可以划分成四(五)块 (当然实际实现上这四块区域可能不是并列的

    2024年02月09日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包