Qt扫盲-QMenu理论总结

news2024/12/23 13:13:12

QMenu理论总结

  • 一、概述
  • 二、常用操作
    • 1. 添加Action
    • 2. 信号槽
    • 3. 可撕下菜单
    • 4. 展示菜单

一、概述

QMenu其实就是菜单控件,菜单控件本质上就是一个选择项目。它可以是菜单栏中的下拉菜单,也可以是独立的上下文菜单。当用户单击相应的位置或按下指定的快捷键时,下拉菜单由菜单栏显示。使用QMenuBar::addMenu()向菜单栏插入一个菜单。当然菜单同样也是可以嵌套使用,也就是按钮里面嵌套按钮的。

样子就像这种单层菜单
在这里插入图片描述
还有嵌套的菜单
在这里插入图片描述

二、常用操作

1. 添加Action

菜单由一系列 QAction 组成。其实就是一个菜单下面要么是QAction, 或者是 QMenu, Action 是通过addAction()、addActions()和insertAction()函数添加的。一个 Action 由QStyle 按照垂直表示并渲染。此外, Action 可以有一个文本标签,在最左边绘制一个可选的图标,以及快捷键序列,如“Ctrl+X”。可以用 actions() 找到菜单中现有的操作。

在QMenu 里面有四种类型的 Action:分隔符、子菜单。、Widget,普通 Action。分隔符是用addSeparator()插入的,子菜单是用addMenu()插入的,所有其他项都被认为是 QAction 。

我们可以使用clear()清除菜单,使用removeAction()删除单个 QAction 。

2. 信号槽

当插入 Action 项时,我们一般会指定 槽函数用于给这个 QAction连接好,当这个菜单项目也即是 QAction 被点击的时候有一个函数来处理点击的响应,每当项目被triggered()时,槽函数就会收到通知。此外,QMenu提供了两个信号:triggered()和hover(),它们表示从菜单中触发的QAction。

信号含义
void aboutToHide()就是这个被激活后,马上要隐藏这个菜单项时,触发的信号
void aboutToShow()就是被激活时,马上要展示这个菜单时,发射的信号
void hovered(QAction *action)就是鼠标移到这个QAction的上面是
void triggered(QAction *action)被快捷键、或者被点击的时候触发

3. 可撕下菜单

QMenu还可以提供一个可撕下的菜单。可撕下菜单是一个顶层窗口,其中包含该菜单的副本。这使得用户可以“撕下”经常使用的菜单,并将它们放置在屏幕上方便的位置。这个用的少些,其实就是把菜单从之前依附的窗口分离出来。
像 icon,title 这些属性就是可以设置这个分离出来的菜单的窗口的图标和标题之类的。就像这种,但是里面内容是 Action而已。
在这里插入图片描述

如果你想为特定的菜单提供此功能,可以使用setTearOffEnabled()插入一个撕下句柄。当使用可撕式菜单时,请记住这个概念通常在Microsoft Windows上不使用,所以一些用户可能不熟悉它。考虑改用QToolBar。
控件可以用QWidgetAction类插入到菜单中。该类的实例用于保存控件,并通过addAction()重载插入到菜单中,该重载接受一个QAction。同样的,我们可以使用addAction()、addActions()和insertAction()函数向部件添加操作。

4. 展示菜单

context 菜单通常通过一些特殊的键盘键右键单击(比如QPushButton用的右键菜单)来调用。它们可以通过popup()异步执行,也可以通过exec()同步执行。也可以在按下按钮时调用菜单;除了调用方式不同之外,它们类似于上下文菜单。

  1. exec() 方式
    QAction *QMenu::exec() 同步显示这个菜单。这等价于exec(pos())。返回值其实就是在弹出菜单或其中一个子菜单中触发的QAction,如果没有项被触发(通常是因为用户按了Esc),则返回nullptr。
    在大多数情况下,你需要自己指定位置,例如,
//当前鼠标位置:
  exec(QCursor::pos());
  
//或者与某个窗口对象指定对齐到 0,0 就是左上对齐
  exec(somewidget.mapToGlobal(QPoint(0,0)));

//或者和鼠标事件的位置相匹配 QMouseEvent *e:
  exec(e->globalPos());
  1. popup() 方式
    void QMenu::popup(const QPoint &p, QAction *atAction = nullptr) 异步显示菜单,以便操作atAction位于指定的全局位置p。要将控件的局部坐标转换为全局坐标,使用QWidget::mapToGlobal()。
    当使用exec()或popup()定位菜单时,请记住,不能依赖菜单的当前size()。出于性能原因,菜单只在必要时调整其大小,因此在许多情况下,显示前后的大小是不同的。相反,使用sizeHint(),它根据菜单的当前内容计算适当的大小。
  • 注意:要使QMenu在屏幕上可见,应该使用exec()或popup()而不是show()

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

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

相关文章

【大数据】第一章:了解Hadoop生态圈

大数据特点(4V) Volume(大量) 非常非常多,大企业数据接近1EB Velocity(高速) 比如在双十一,数据爆增 Variety(多样) 很多样子的数据,比如,代码,图片,视频,JSON&am…

【C++】八大排序

文章目录前言1. 插入排序2. 希尔排序3. 选择排序4. 堆排序5. 冒泡排序6. 快速排序(重点)6.1 快速排序(hoare版本)6.2 快速排序(挖坑法)6.3 快速排序(前后指针法)6.4 快速排序(非递归)6.5 快速排序(优化)7. 归并排序7.1 归并排序(递归实现)7.2 归并排序非递归实现8. 计数排序排序…

Docker搭建PHP运行环境

目录 Docker 安装 PHP Docker 安装 Nginx ​编辑运行nginx容器 nginx安装成功 Nginx PHP 部署PHP项目 启动 PHP: 启动 nginx: 查看正在运行的容器: 访问域名测试搭建结果 Docker相关命令描述 Docker 安装 PHP 这里我们拉取官方的镜像,标签…

代码随想录算法训练营第8天 344.反转字符串、541. 反转字符串II、剑指Offer58-II.左旋转字符串

代码随想录算法训练营第8天 344.反转字符串、541. 反转字符串II、剑指Offer58-II.左旋转字符串 反转字符串 力扣题目链接(opens new window) 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 对于字符串,我…

Linux驱动开发基础__Linux 系统对中断处理的演进

目录 1 Linux 对中断的扩展:硬件中断、软件中断 2 中断处理原则 1:不能嵌套 3 中断处理原则 2:越快越好 4 要处理的事情实在太多,拆分为:上半部、下半部 5 下半部要做的事情耗时不是太长:tasklet…

154. 滑动窗口

文章目录QuestionIdeasCodeQuestion 给定一个大小为 n≤106 的数组。 有一个大小为 k 的滑动窗口,它从数组的最左边移动到最右边。 你只能在窗口中看到 k 个数字。 每次滑动窗口向右移动一个位置。 以下是一个例子: 该数组为 [1 3 -1 -3 5 3 6 7]&…

知识点滴 - 数据库视图概念

视图是数据库中一个非常简单的概念,写过SQL的人几乎大致了解视图。本文除了在回顾视图的本质及相关操作知识时,会重点阐述它蕴含的分层思想在数据分析工作中的作用。 1,视图的本质与作用 视图是一个数据库中的虚拟表,它的本质是S…

模板特化与static成员初始化

我们知道在 c 的类中&#xff0c;如果有static成员数据&#xff0c;则需要在类外进行定义&#xff0c;而类内那只是声明。这个在类模板中也是一样的&#xff0c;需要在类外进行定义。普通类模板的 static 数据的初始化&#xff0c;如下代码&#xff1a; template <class T&…

SpringBoot在Controller层接收参数的常用方法(超详细)

前言 在工作中&#xff0c;比如要实现一个功能&#xff0c;前端传什么参数&#xff0c;后端的controller层中怎么接收参数 &#xff0c;封装成了什么实体对象&#xff0c;有些参数是在URL上使用&#xff0c;有些参数是在body上使用&#xff0c;service层中做了什么逻辑&#xf…

数据结构(根据王道整理)

数据结构 文章目录数据结构线性结构与非线性结构链表kmp算法栈二叉树完全二叉树二叉树的存储结构二叉树的访问树的深度二叉树的层次遍历由遍历序列构造二叉树已知后序跟中序建立二叉树线索二叉树序言&#xff08;土办法解决找前驱&#xff09;线索二叉树存储结构中序线索二叉树…

几道基础的二叉树、树的题

几道基础的二叉树、树的题LeetCode144.二叉树的前序遍历思路及实现方法一&#xff1a;递归方法二&#xff1a;迭代LeetCode145.二叉树的后序遍历思路及实现方法一&#xff1a;递归方法二&#xff1a;迭代LeetCode94.二叉树的中序遍历思路及实现方法一&#xff1a;递归方法二&am…

数据结构(2)树状数组

活动 - AcWing 参考&#xff1a;《算法竞赛进阶指南》-lyd 目录 一、概念 1.主要功能 2.实现方式 3. 二、例题 1.树状数组和逆序对 2.树状数组和差分 3. 两层差分 4. 结合二分 一、概念 1.主要功能 树状数组可以完成的功能主要有&#xff1a; 维护序列的前缀和单…

pytest-pytest插件之测试覆盖率pytest-cov

简介 测试覆盖率是指项目代码被测试用例覆盖的百分比&#xff0c;使用pytest-cov插件可以统计测试覆盖率 添加链接描述 安装插件pytest-cov pip install pytest-cov用法 基本用法 –cov的参数是要统计代码覆盖率的源码&#xff0c;我将源码放在mysrc中&#xff0c;test_s…

qiankun微应用加载第三方js跨域报错

当我们在qiankun微应用&#xff0c;引入第三方js脚本时会产生跨域问题并报错&#xff0c;看qiankun的解释&#xff1a;常见问题 - qiankunqiankun会把静态资源的加载拦截&#xff0c;改用fetch方式获取资源&#xff0c;所以要求这些资源支持跨域。虽然qiankun也提供了解决方案&…

react面试题--react入门小案例案例

React入门应该是这样的 源码&#xff1a;https://github.com/dansoncut/React-beginner-tutorial-TeacherEgg.git 视频地址&#xff1a;https://www.bilibili.com/video/BV1be411w7iF/?spm_id_from333.337.search-card.all.click&vd_sourceae42119b44d398cd8fe181740c3e…

Java线程的六种状态

前言&#xff1a;其实线程的状态在操作系统的PCB中就对其进行了描述&#xff0c;但是Java中觉得自带的状态并不是特别好&#xff0c;于是引入了线程在Java中的六种状态。 (1) NEW 安排了工作还未行动&#xff0c;即&#xff1a;Thread对象创建出来了&#xff0c;但是内核的PCB…

开源工具 tomcat

Tomcat 封装了很多HTTP的操作&#xff1a;负责解析 HTTP 协议&#xff0c;解析请求数据&#xff0c;并发送响应数据。 官网 download下的which version&#xff1a; Apache Tomcat - Which Version Do I Want? 可以看tomcat对jdk的版本要求。 启动 启动&#xff1a;双击…

【redis6】第六章(新数据类型)

Bitmaps 简介 现代计算机用二进制&#xff08;位&#xff09;作为信息的基础单位&#xff0c; 1个字节等于8位&#xff0c; 例如“abc”字符串是由3个字节组成&#xff0c; 但实际在计算机存储时将其用二进制表示&#xff0c; “abc”分别对应的ASCII码分别是97、 98、 99&am…

SEO优化收徒站外引蜘蛛软件方法

SEO优化收徒站外引蜘蛛软件方法 今天我们讲解站外引蜘蛛的方法&#xff0c;站外引蜘蛛的方法无非就是五个大点。 第一个是搜索引擎的提交&#xff0c;我们通过是百度资源站展或者 360 或者神马头条&#xff0c;搜狗 bin 等等这样的一个搜索引擎去提交我们的链接。 里面主要是…

【css】结构选择器

结构选择器&#xff0c;也称之为组合器选择器&#xff0c;根据它们之间的特定关系来选取元素。CSS 中有四种不同的组合器&#xff1a;后代选择器 (空格)子选择器 (>)相邻兄弟选择器 ()通用兄弟选择器 (~)选择器示例描述element elementdiv p选择 div 元素内部的所有 p 元素e…