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

【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

  • egui github
  • demo online
    一些官方例子
    想听听cpu轰鸣的声音,可以将左上的参数拉满
  • 关于immediate mode
    wikipedia
    microsoft learn

开始吧

  • clone下这个项目(也可以使用github提供的Use this template功能),这是官方说明中的一个template
    git clone https://github.com/emilk/eframe_template.git
    
  • 删除项目中的toolchain文件
    在这里插入图片描述
  • 编译运行(cargo换源见安装参考)
    PS E:\eframe_template-master> cargo run Updating `rsproxy` index
    remote: Counting objects: 32254, done.
    remote: Compressing objects: 100% (14081/14081), done.
    remote: Total 32254 (delta 23946), reused 25317 (delta 17601)
    Receiving objects: 100% (32254/32254), 7.70 MiB | 7.47 MiB/s, done.
    Resolving deltas: 100% (23946/23946), completed with 2726 local objects.
    From https://rsproxy.cn/crates.io-index+ 69b92ab647...84fdefbd80 HEAD       -> origin/HEAD  (forced update)Downloaded ...Downloaded 21 crates (14.4 MB) in 12.60s (largest was `windows` at 11.9 MB)Compiling ...Compiling egui-winit v0.22.0Compiling eframe v0.22.0Compiling eframe_template v0.1.0 (E:\Workspace\eframe_template-master)Finished dev [unoptimized + debuginfo] target(s) in 1m 12sRunning `target\debug\eframe_template.exe`
    
    可以看到我们的应用窗口打开了
    在这里插入图片描述

小小的尝试

  • 根据readme中的内容,我们可以修改下工程的名字,现在我们的应用名称是eframe template,我们将它改成demo app
  • 修改Cargo.toml
    [package] 
    name = "demo_app" // 修改这里
    version = "0.1.0"
    authors = ["o0olele <o0o@lele.com>"] // 修改这里
    edition = "2021"
    rust-version = "1.71" // 这里可以替换成我们使用的rust版本
    
  • 修改src/main.rs
    #![warn(clippy::all, rust_2018_idioms)]
    #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release// When compiling natively:
    #[cfg(not(target_arch = "wasm32"))]
    fn main() -> eframe::Result<()> {env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`).let native_options = eframe::NativeOptions::default();eframe::run_native("demo app", // `eframe template` to `demo app`native_options,Box::new(|cc| Box::new(demo_app::TemplateApp::new(cc))), // `eframe_template::TemplateApp` to `demo_app::TemplateApp`)
    }// When compiling to web using trunk:
    #[cfg(target_arch = "wasm32")]
    fn main() {// Redirect `log` message to `console.log` and friends:eframe::WebLogger::init(log::LevelFilter::Debug).ok();let web_options = eframe::WebOptions::default();wasm_bindgen_futures::spawn_local(async {eframe::WebRunner::new().start("the_canvas_id", // hardcode itweb_options,Box::new(|cc| Box::new(demo_app::TemplateApp::new(cc))), // `eframe_template::TemplateApp` to `demo_app::TemplateApp`).await.expect("failed to start eframe");});
    }
    
  • 再次cargo run,可以看到我们的应用名称已经变成了demo app
    在这里插入图片描述
  • readme中的另外两个修改是web 应用构建相关的,后面再说

尝试下web

  • 添加wasm相关资源
    set $RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustup; rustup target add wasm32-unknown-unknown 
    
  • 安装trunk(真tm吃cpu)
    cargo install --locked trunk
    
  • 开启trunk server(真tm吃cpu)
    trunk serve
    
  • 浏览器打开http://127.0.0.1:8080
    在这里插入图片描述
  • 可以看到我们的应用名称还是eframe_template,这个时候我们可以进行一些修改
  • 修改index.html
    ...
    <title>demo app</title>
    ...
    
  • 修改assets/sw.js
    var cacheName = 'egui-template-pwa';
    var filesToCache = ['./','./index.html','./demo_app.js','./demo_app_bg.wasm',
    ];/* Start the service worker and cache all of the app's content */
    self.addEventListener('install', function (e) {e.waitUntil(caches.open(cacheName).then(function (cache) {return cache.addAll(filesToCache);}));
    });/* Serve cached content when offline */
    self.addEventListener('fetch', function (e) {e.respondWith(caches.match(e.request).then(function (response) {return response || fetch(e.request);}));
    });
    
    在这里插入图片描述

一些相关数据

  • 该桌面应用内存占用(cargo run --release),有点高啊
    在这里插入图片描述
  • 可执行程序大小(.eframe_template-master\target\release目录下)
    在这里插入图片描述

相关文章:

【rust/egui】(一)从编译运行template开始

说在前面 rust新手&#xff0c;egui没啥找到啥教程&#xff0c;这里自己记录下学习过程环境&#xff1a;windows11 22H2rust版本&#xff1a;rustc 1.71.1egui版本&#xff1a;0.22.0eframe版本&#xff1a;0.22.0rust windows安装参考&#xff1a;这里本文默认读者已安装相关环…...

VMware虚拟安装Ubuntu,然后切换Ubuntu内核版本

无论你选择哪种方法&#xff0c;一旦进入 GRUB 引导菜单&#xff0c;你应该能够选择需要的内核版本并启动系统。 打开终端&#xff1a;你可以通过按下 Ctrl Alt T 快捷键来打开终端。 使用 sudo&#xff1a;切换内核需要管理员权限&#xff0c;因此你需要使用 sudo 命令。首…...

爆肝整理,Python自动化测试-Pytest参数化实战封装,一篇打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 参数化&#xff1…...

西门子AI面试问答(STAR法则回答实例)

0.试题情况 0.未来三到五年的职业规划&#xff08;不计入成绩&#xff0c;测试用&#xff09;&#xff1b; 1.一些基本问题&#xff0c;目前所在城市目标薪资意向工作城市&#xff08;手动输入&#xff0c;非视频录制&#xff09;&#xff1b; 2.宝洁8大问的问题1个英文回答…...

中间平台工具 - graylog

graylog是非常好用的数据处理平台&#xff0c;可以对数据进行&#xff1a;streams分类、pipeline、正则匹配、统计汇总、定制化配置Alerts 等处理。 graylog的一些概念&#xff1a; 索引(消息存储的位置&#xff0c;默认indices default) streams(从inputs里面&#xff0c;通…...

VectorStyler for Mac: 让你的创意无限绽放的全新设计工具

VectorStyler for Mac是一款专为Mac用户打造的矢量设计工具&#xff0c;它结合了功能强大的矢量编辑器和创意无限的样式编辑器&#xff0c;让你的创意无限绽放。 VectorStyler for Mac拥有直观简洁的用户界面&#xff0c;让你能够轻松上手。它提供了丰富的矢量绘图工具&#x…...

轻松转换TS视频为MP4,实现优质视频剪辑体验

如果你是一个视频剪辑爱好者&#xff0c;你一定会遇到各种视频格式之间的转换问题&#xff0c;特别是将TS视频转换为MP4格式。别担心&#xff0c;我们的视频剪辑软件将为你提供最简单、高效的解决方案&#xff01; 首先第一步&#xff0c;我们要进入媒体梦工厂主页面&#xff…...

IDEA关闭项目,但是后台程序没有关闭进程(解决方案)

最近遇到一个很奇怪的问题&#xff0c;idea关闭项目后&#xff0c;系统进程没有杀死进程&#xff0c;再次执行的时候会提示端口占用&#xff0c;并提示Process exited with an error: 1 (Exit value: 1) 错误原因&#xff1a;应用程序关闭后&#xff0c;进程不能同步关闭 解决方…...

github拉取自己的私有仓库(Token方式、本地秘钥方式)

github拉取自己的私有仓库(Token方式、本地秘钥方式) 问题背景 日常开发和学习过程中&#xff0c;经常碰到需要从GitHub或者其他类似网站&#xff0c;拉取私有仓代码的需求。本文将总结常用的两种方式&#xff0c;Token方式和本地秘钥方式&#xff0c;方便后续查阅和优化。 …...

聊聊非科班转IT

我这算是妥妥的非科班转计算机的了&#xff0c;先介绍下自己的情况吧。 14年大专毕业&#xff0c;学的汽车运用专业。&#xff08;什么&#xff1f;你说啥是汽车运用专业&#xff1f;那机械设计总知道吧&#xff0c;这个专业接本后就是机械设计了。&#xff09; 毕业后服役&…...

NET域名的优势

NET域名是互联网上最常见的顶级域名之一&#xff0c;其开放使用日期远比其他主要顶级域名早&#xff0c;始于1985年。其作为商业网络服务提供者的域名&#xff0c;主要用于企业、组织和个人等在网络上建立自己的网站。本文将从以下三个方面介绍NET域名。 一、NET域名的历史 N…...

ZLMediaKit推流测试

推流测试 ZLMediaKit支持rtsp/rtmp/rtp推流&#xff0c;一般通常使用obs/ffmpeg推流测试&#xff0c;其中FFmpeg推流命令支持以下&#xff1a; 1、使用rtsp方式推流 # h264推流 ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transp…...

高防服务器的防御机制

高防服务器的防御机制 易受到GJ的网站选择接入高防服务更安全&#xff0c;大家对于这个都清楚!但是对于高防服务如何实现防御来保障安全的&#xff0c;又了解多少呢?今天壹基比小源&#xff08;贰伍壹叁壹叁壹贰玖捌&#xff09;就来说说高防服务实现防御的常规方法一般有以下…...

【PySide】QtWebEngine网页浏览器打开Flash网页

QWebEngineView 加载 flash插件,可成功显示Flash,如图 说明 QtWebEngine与Chromium版本对应关系 Chromium对Flash的支持 QtWebEngine模块 Qt WebEngine取代了Qt WebKit模块,后者基于WebKit项目,但自Qt 5.2以来没有主动与上游WebKit代码同步,并且在Qt 5.5中已被弃用。有…...

【力扣每日一题】1572. 矩阵对角线元素的和 8.11打卡

文章目录 题目思路代码 题目 1572. 矩阵对角线元素的和 难度&#xff1a; 简单 描述&#xff1a; 给你一个正方形矩阵 mat&#xff0c;请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 返回合并后的二叉树。 注意…...

Wi-Fi 安全在学校中的重要性

Wi-Fi 是教育机构的基础设施&#xff0c;从在线家庭作业门户到虚拟教师会议&#xff0c;应有尽有。大多数 K-12 管理员对自己的 Wi-Fi 网络的安全性充满信心&#xff0c;并认为他们现有的网络安全措施已经足够。 不幸的是&#xff0c;这种信心往往是错误的。Wi-Fi 安全虽然经常…...

若依微服务集成CAS,实现单点登录

若依&#xff08;RuoYi&#xff09;微服务是一款基于Spring Cloud Alibaba开发的企业级微服务框架&#xff0c;采用前后端分离方式&#xff0c;使用了常用的微服务组件&#xff0c;如Feign、Nacos、Sentinel、Seata等&#xff0c;提供了丰富的微服务治理功能&#xff0c;如服务…...

解锁园区交通新模式:园区低速自动驾驶

在当今科技飞速发展的时代&#xff0c;自动驾驶技术成为了备受关注的领域之一。尤其是在园区内部交通管理方面&#xff0c;自动驾驶技术的应用正在日益受到重视。 园区低速自动驾驶的实现需要多个技术领域的协同合作&#xff0c;包括自动驾驶技术、计算机视觉技术、通信技术、物…...

SpringBoot-Hello World

SpringBootWeb快速入门 创建Springboot工程&#xff0c;并勾选web开发相关依赖定义HelloController类&#xff0c;添加方法hello&#xff0c;并添加相关注释运行测试 创建新的SpringBoot项目 几个注意的点&#xff1a; Name&#xff1a;基本上不用管&#xff0c;会根据下面的Ar…...

香港服务器三网直连内地线路什么意思?好用吗?

​  三网直连内地是指香港服务器可以直接连接中国内地的电信、联通和移动三大运营商网络&#xff0c;避免了中间网络干线的支持。这样可以实现直接、快速、稳定的网络访问&#xff0c;提高用户对网络访问的效率&#xff0c;减少网络访问问题和拥堵的现象。 香港服务器直连内地…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...