<Rust>egui学习之部件(十二):如何添加右键菜单?

news2024/11/18 10:36:44

前言
本专栏是关于Rust的GUI库egui的部件讲解及应用实例分析,主要讲解egui的源代码、部件属性、如何应用。

环境配置
系统:windows
平台:visual studio code
语言:rust
库:egui、eframe

概述
本文是本专栏的第十二篇博文,主要讲述如何添加右键菜单部件。

事实上,类似于iced,egui都提供了示例程序,本专栏的博文都是建立在官方示例程序以及源代码的基础上,进行的实例讲解。
即,本专栏的文章并非只是简单的翻译egui的官方示例与文档,而是针对于官方代码进行的实际使用,会在官方的代码上进行修改,包括解决一些问题。

系列博客链接:
1、<Rust>egui学习之小部件(一):如何在窗口及部件显示中文字符?
2、<Rust>egui学习之小部件(二):如何在egui窗口中添加按钮button以及标签label部件?
3、<Rust>egui学习之小部件(三):如何为窗口UI元件设置布局(间隔、水平、垂直排列)?
4、<Rust>egui学习之小部件(四):如何在窗口中添加滚动条Scroll部件?
5、<Rust>egui学习之小部件(五):如何在窗口中添加图像部件?
6、<Rust>egui学习之小部件(六):如何在窗口中添加菜单栏部件?
7、<Rust>egui学习之小部件(七):如何在窗口中添加颜色选择器colorpicker部件?
8、<Rust>egui学习之小部件(八):如何在窗口中添加滑动条slider部件?
9、<Rust>egui学习之小部件(九):如何在窗口中添加下拉列表combobox部件?
10、<Rust>egui学习之小部件(十):如何在窗口中添加复选框checkbox部件?
11、<Rust>egui学习之部件(十一):如何在窗口中添加单选框radiobutton部件?

部件属性

在egui中,我们使用menu_button来创建菜单项,但是通常我们可能还会有右键显示菜单的需求,那么我们可以用context_menu项来赋予某个部件右键菜单:

pub(crate) const CONTEXT_MENU_ID_STR: &str = "__egui::context_menu";  

/// Response to secondary clicks (right-clicks) by showing the given menu.
pub(crate) fn context_menu(
    response: &Response,
    add_contents: impl FnOnce(&mut Ui),
) -> Option<InnerResponse<()>> {
    let menu_id = Id::new(CONTEXT_MENU_ID_STR);
    let mut bar_state = BarState::load(&response.ctx, menu_id);

    MenuRoot::context_click_interaction(response, &mut bar_state);
    let inner_response = bar_state.show(response, add_contents);

    bar_state.store(&response.ctx, menu_id);
    inner_response
}

可以发现,context_menu是一个crate,我们可以将其赋予大部分部件上,我们来看下实际应用:

ui.label("右击").context_menu(|ui|{
                    ui.label("右击菜单");
                    ui.add(Button::new("右击菜单按钮"));
                })

在上面的例子中,我们为标签右击添加了右键菜单,菜单包括:
标签、按钮
在这里插入图片描述
可以看到,使用是非常简单的,我们可以为菜单按钮点击一个点击反馈:

 if ui.add(Button::new("右击菜单按钮")).clicked(){
                        ui.close_menu(); 
                    };

点击后关闭菜单显示。

演示

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2166749.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据分析师之Excel学习

前言 excel作为职场人来说&#xff0c;已经是人人必备的技能了&#xff0c;所以还不知道这个的小伙伴&#xff0c;一定要抓紧时间学习&#xff0c;紧跟时代的步伐。 Excel 几个重要的版本 97-2003版本是国内最早流行的版本 .xlsx后缀的表格文件&#xff0c;基本是07版本及…

唯美古风短视频素材去哪找?古风唯美视频素材网站推荐

在现代社会&#xff0c;越来越多人向往古风的唯美与宁静。在制作短视频、宣传片或自媒体内容时&#xff0c;找到合适的唯美古风素材是成功的关键。本文将为您推荐一些优质素材网站&#xff0c;帮助您轻松获取心仪的短视频素材。 蛙学网 蛙学网是一个专注于分享各类视频素材的平…

SpringCloud无法注册Nacos和配置中心

今天升级SpringCloud版本&#xff0c;导致服务无法注册到nacos&#xff0c;使用nacos作为配置中心也无法刷新配置信息&#xff0c;后来发现是因为只更新了SpringCloud版本&#xff0c;SpringCloud-Alibaba没有更新导致的问题。 升级出现问题的版本是&#xff1a; <dependen…

高压电容器带电合闸时需要注意什么

在现代电力系统中&#xff0c;高压电容器被广泛应用于电力的储存和调节&#xff0c;其带电合闸操作对于维护电力系统的稳定性至关重要。然而&#xff0c;带电合闸的过程涉及高度的电气安全风险&#xff0c;必须遵循一系列严格的安全措施。 高压电容器带电合闸时需要注意以下几…

【自学笔记】支持向量机(4)——支持向量回归SVR

引入 SVM解决了分类问题&#xff0c;而用类似方法解决回归问题的模型称为支持向量回归。目标是得到一个模型&#xff0c;使输出的 f ( x ⃗ ) f(\vec{x}) f(x )与 y y y尽可能接近。 传统的回归模型直接计算 f ( x ⃗ ) f(\vec{x}) f(x )与 y y y的差距作为损失&#xff0c;当两…

DS2756E+TR一款用于数据采集和信息存储器件 高精度电池电量计

DS2756ET&R高精度电池电量计是一款数据采集和信息存储器件&#xff0c;专为成本敏感且空间有限的单节Li/聚合物电池量身定做。提供了精确估计剩余容量所需的关键硬件资源&#xff0c;包括用于测量温度、电压、电流和累计电流的低功耗精密电路&#xff0c;以及非易失(NV)数据…

如何把PDF样本册转换为网址链接

​随着互联网的普及&#xff0c;将纸质或PDF格式的样本册转化为网址链接&#xff0c;以便于在线浏览和分享&#xff0c;变得越来越重要。本文将为您详细讲解如何将PDF样本册转换为网址链接&#xff0c;让您轻松实现线上展示和分享。 一、了解PDF样本册与网址链接 1. PDF样本册…

地表最强开源大模型!Llama 3.2,如何让你的手机变身私人智能助理

你有没有想过,为什么现在的手机越来越像小型电脑?无论是拍照、看视频,还是用各种APP,甚至是AI助手,手机的功能几乎无所不能。其实,这一切的背后有一个技术正在悄悄改变我们的生活,那就是Llama 3.2。它不仅仅是一款AI模型,它让智能手机变得更聪明,更高效。今天,我们就…

vivado中除法器ip核的使用

看了很多博客&#xff0c;都没写清楚&#xff0c;害 我要实现 reg [9:0] a; 被除数 reg [16:0] b; 除数 wire [39:0] res; 结果 wire [15:0] real_shan; 要实现a/b 则如下这么配置 选择经过几个周期出结果 wire [39:0] res; // dly5 div_gen_0 div_gen_0_inst (.aclk(clk), …

Windows 11 version 23H2 中文版、英文版 (x64、ARM64) 下载 (updated Sep 2024)

Windows 11 version 23H2 中文版、英文版 (x64、ARM64) 下载 (updated Sep 2024) Windows 11, version 23H2&#xff0c;企业版 arm64 x64 请访问原文链接&#xff1a;https://sysin.org/blog/windows-11/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者…

2024/9/26 英语每日一段

In part, that’s because it’s harder to empathize with someone who feels distant or unknown than a close loved one. “The more shared experiences you have with someone, the more of a rich, nuanced representation you can draw on,” Cameron says. But empath…

常见网络服务搭建之NFS服务搭建

在嵌入式Linux开发中&#xff0c;需要在Linux主机编写程序代码&#xff0c;然后编译程序&#xff0c;生成的二进制程序文件要传输到目标机上才能调试、运行。那么如何更快、更便捷地传输文件&#xff0c;提高开发工作的效率呢&#xff1f;NFS无疑是最好的选择。通过NFS服务&…

排序算法的分析和应用

自己设计一个长度不小于10的乱序数组&#xff0c;用希尔排序&#xff0c;自己设定希尔排序参数 画出每一轮希尔排序的状态 自己设计一个长度不小于10的乱序数组&#xff0c;用堆排序&#xff0c;最终要生成升序数组&#xff0c;画出建堆后的状态 画出每一轮堆排序的状态 自…

光耦知识分享:如何挑选合适的可控硅光耦型号

可控硅光耦是一种光电耦合器件&#xff0c;它结合了光敏元件&#xff08;通常是光敏二极管&#xff09;和可控硅器件&#xff08;如普通可控硅或三端可控硅&#xff09;的特性。它的工作原理是利用光信号控制可控硅的导通和截止&#xff0c;从而实现对电路的控制。 可控硅光耦…

创业者必备的7个AI工具

独立黑客和个体企业家通常需要利用技术来保持竞争力和效率。以下七种 AI 工具可帮助你简化运营、提高生产力和推动增长。 NSDT工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模…

R包:ggheatmap热图

加载R包 # devtools::install_github("XiaoLuo-boy/ggheatmap")library(ggheatmap) library(tidyr)数据 set.seed(123) df <- matrix(runif(225,0,10),ncol 15) colnames(df) <- paste("sample",1:15,sep "") rownames(df) <- sapp…

flutter 由于找不到 VCRUNTIME140 1.d

场景&#xff1a;发送给别人用&#xff0c;结果 因为没有Visual C 运行时库 去 C:\Windows\System32 目录里找 msvcp140.dll vcruntime140.dll vcruntime140_1.dll 3个文件&#xff0c;然后复制到你flutter打包后的根目录里 就可以了

183天打造行业新标杆!BOE(京东方)国内首条第8.6代AMOLED生产线提前全面封顶

2024年9月25日,BOE(京东方)投建的国内首条第8.6代AMOLED生产线全面封顶仪式在成都市高新区举行,该生产线从开工到封顶仅用183天,以科学、高效、高质的速度再树行业新标杆。这不仅是BOE(京东方)创新突破、打造新质生产力的又一重大举措,也是OLED领域的里程碑事件,极大推动OLED显…

Win32动态库介绍及全局函数导出

Windows操作系统中&#xff0c;库分为动态链接库(dll)和静态链接库(lib) 动态库是Windows中实现代码共享的一种方式。它是一个二进制式文件&#xff0c;不可单独运行&#xff0c;需要调用方调用才能运行。在Windows中&#xff0c;动态库可以被多种编程语言所支持。 静态链接库不…

【测试】开发模型

什么是模型 规范的流程是在时代的演变下逐渐成型&#xff0c;并不是一开始就是规范的流程。 你以为的模型 实际的模型 随着软件⼯程学科的发展&#xff0c;⼈们对计算机软件的认识逐渐深⼊。软件⼯作的范围不仅仅局限在程序编写&#xff0c;⽽是扩展到了整个软件⽣命周期&…