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

qt QMenu详解

1、概述

QMenu是Qt框架中的一个类,用于创建和管理菜单。它提供了丰富的接口来添加菜单项(通常是QAction对象)、子菜单以及分隔符。QMenu可以嵌入到菜单栏(QMenuBar)中,也可以作为弹出菜单(通过调用exec()方法)使用。QMenu支持嵌套菜单,即菜单项本身可以是一个子菜单,从而创建出复杂的菜单结构。

QMenu不仅支持文本菜单项,还支持图标、快捷键和状态提示等功能,这些都可以通过QAction来设置。此外,QMenu还提供了对菜单项可见性、启用/禁用状态以及检查状态(checkable)的细粒度控制。

2、重要方法
  • addAction(QAction *action):向菜单中添加一个动作。
  • addMenu(QMenu *menu):向菜单中添加一个子菜单。
  • addSeparator():在菜单中添加一个分隔符。
  • clear():清除菜单中的所有项。
  • exec(const QPoint &pos = QPoint()):在指定位置显示菜单作为弹出菜单,并返回用户选择的动作的索引(或-1如果没有选择)。
  • setDefaultAction(QAction *action):设置菜单的默认动作,当用户按下回车键时触发。
  • setTitle(const QString &title):设置菜单的标题。
  • actions():返回菜单中所有动作的列表。

3、重要信号
  • triggered(QAction *action):当菜单中的某个动作被触发时发出此信号。
  • aboutToShow():在菜单即将显示之前发出此信号,可以用于动态调整菜单项。
  • aboutToHide():在菜单即将隐藏之前发出此信号。

需要注意的是,QMenu本身并不直接处理用户输入,而是通过QAction来响应动作。因此,大多数与QMenu交互的信号和槽都是通过QAction来实现的。

#include <QApplication>  
#include <QMainWindow>  
#include <QMenuBar>  
#include <QMenu>  
#include <QAction>  
#include <QMessageBox>  class MainWindow : public QMainWindow {  Q_OBJECT  public:  MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {  // 创建菜单栏  QMenuBar *menuBar = this->menuBar();  // 创建文件菜单  QMenu *fileMenu = menuBar->addMenu(tr("&File"));  // 创建动作  QAction *newAction = new QAction(tr("&New"), this);  newAction->setIcon(QIcon(":/icons/new.png"));  newAction->setStatusTip(tr("Create a new file"));  connect(newAction, &QAction::triggered, this, &MainWindow::onNewFile);  QAction *openAction = new QAction(tr("&Open..."), this);  openAction->setIcon(QIcon(":/icons/open.png"));  openAction->setStatusTip(tr("Open an existing file"));  connect(openAction, &QAction::triggered, this, &MainWindow::onOpenFile);  // 将动作添加到文件菜单  fileMenu->addAction(newAction);  fileMenu->addAction(openAction);  // 创建一个弹出菜单  QMenu *popupMenu = new QMenu(this);  QAction *exitAction = new QAction(tr("E&xit"), this);  exitAction->setStatusTip(tr("Exit the application"));  connect(exitAction, &QAction::triggered, qApp, &QApplication::quit);  popupMenu->addAction(exitAction);  QPushButton *btn = new QPushButton(this);setCentralWidget(btn);connect(btn, &QPushButton::clicked, this, [&, btn, popupMenu]{popupMenu->exec(btn->mapToGlobal(btn->rect().center()));});}  private slots:  void onNewFile() {  QMessageBox::information(this, tr("New File"), tr("Create a new file..."));  }  void onOpenFile() {  QMessageBox::information(this, tr("Open File"), tr("Open an existing file..."));  }  
};  int main(int argc, char *argv[]) {  QApplication app(argc, argv); MainWindow window;  window.show();  return app.exec();  
} 

觉得有帮助的话,打赏一下呗。。

           

相关文章:

qt QMenu详解

1、概述 QMenu是Qt框架中的一个类&#xff0c;用于创建和管理菜单。它提供了丰富的接口来添加菜单项&#xff08;通常是QAction对象&#xff09;、子菜单以及分隔符。QMenu可以嵌入到菜单栏&#xff08;QMenuBar&#xff09;中&#xff0c;也可以作为弹出菜单&#xff08;通过…...

HTMLCSS:旋转的动态卡片

效果演示 这段代码创建了一个具有动态背景和渐变效果的卡片。卡片背景有一个无限循环的旋转动画&#xff0c;增加了视觉吸引力。这种效果可以用于展示个人信息、项目介绍或其他需要吸引用户注意的内容。 HTML <div class"card"><h3>前端Hardy</h3&…...

通过自然语言表达你的想法。GitHub Spark让任何人都能使用人工智能,为自己创建软件...

我们能否让任何人都能使用人工智能&#xff0c;为自己创建软件&#xff1f;尽管开发者喜欢定制自己的开发环境以提高效率和趣味性&#xff0c;但创建个性化应用程序的复杂性常常阻止他们这样做。 如何使个性化软件的创建变得像定制开发环境一样简单?并让更多人能够轻松实现这种…...

c++的list类

本篇将讲述list类中的各种重要和常用函数&#xff08;begin&#xff08;&#xff09;、end&#xff08;&#xff09;、rbegin&#xff08;&#xff09;、rend&#xff08;&#xff09;、empty&#xff08;&#xff09;、size&#xff08;&#xff09;、front&#xff08;&#…...

uniapp数据缓存

利用uniapp做开发时&#xff0c;缓存数据是及其重要的&#xff0c;下面是同步缓存和异步缓存的使用 同步缓存 在执行同步缓存时会阻塞其他代码的执行 ① uni.setStorageSync(key, data) 设置缓存&#xff0c;如&#xff1a; uni.setStorageSync(name, 张三) ② uni.getSt…...

HarmonyOS-权限管理

一. 权限分类 1. system_grant system_grant 为系统授权&#xff0c;无需询问用户&#xff0c;常用的权限包括网络请求、获取网络信息、获取wifi信息、获取传感器数据等。 /* system_grant&#xff08;系统授权&#xff09;*/static readonly INTERNET ohos.permission.INTE…...

Github 2024-11-02 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-11-02统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Python项目2Dart项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust, Dart协议类型:GNU Affero Genera…...

修改HarmonyOS鸿蒙图标和名字,打包后安装到真机,应用图标丢失变成透明,修改名字也不生效,还是默认的labeL解决方案教程

HarmonyOS鸿蒙打包hap 安装应用到桌面没有图标&#xff0c;用hdc安装到真机&#xff0c;打包后应用图标丢失变成透明&#xff0c;名字也还是默认的label的bug&#xff0c;以下是解决方案 以下是修改方案&#xff1a; 1、修改应用名字&#xff1a; 2、修改应用图标&#xff1a…...

unreal engine5动画重定向

UE5系列文章目录 文章目录 UE5系列文章目录前言一、下载动画资源二、创建IK Rig&#xff08;IK绑定&#xff09; 前言 在Unreal Engine 5.4中&#xff0c;动画重定向&#xff08;Animation Retargeting&#xff09;和动作匹配&#xff08;Motion Matching&#xff09;是两种不…...

蓝桥杯练习笔记(二十-日期问题)

日期题常见于填空题&#xff0c;关键点涉及闰年的判断和星期几的判断 1.根据间隔天数计算日期 题目来源&#xff1a;CSDN算法技能树 在X星系的广袤空间中漂浮着许多X星人造“炸弹”&#xff0c;用来作为宇宙中的路标。 每个炸弹都可以设定多少天之后爆炸。 比如&#xff1a;…...

jenkins 构建报错 mvn: command not found

首先安装过 maven&#xff0c;并且配置过环境变量 win r ,输入 cmd 键入 mvn -v 出现上图输出&#xff0c;则证明安装成功。 原因 jenkins 没有 maven 配置全局属性, 导致无法找到 mvn 命令。 解决方案 找到全局属性&#xff0c;点击新增&#xff0c;配置 MAVEN_HOME 路…...

Vue computed watch

computed watch watch current prev...

【java】java的基本程序设计结构06-运算符

运算符 一、分类 算术运算符关系运算符位运算符逻辑运算符赋值运算符其他运算符 1.1 算术运算符 操作符描述例子加法 - 相加运算符两侧的值A B 等于 30-减法 - 左操作数减去右操作数A – B 等于 -10*乘法 - 相乘操作符两侧的值A * B等于200/除法 - 左操作数除以右操作数B /…...

数据建模圣经|数据模型资源手册卷3,数据建模最佳实践

简介 本书采用了类设计模式的方式对数据模型进行高度抽象总结&#xff0c;展现了常见的数据模型构建模型等模型的作用、层次、分类、地位、沟通方式&#xff0c;和业务规则。使用一个强大的数据模型模式的数据建模&#xff0c;评估特定与广义模型的优缺点&#xff0c;有助于你改…...

Kafka相关知识点(上)

为什么要使用消息队列&#xff1f; 使用消息队列的主要目的主要记住这几个关键词:解耦、异步、削峰填谷。 解耦: 在一个复杂的系统中&#xff0c;不同的模块或服务之间可能需要相互依赖&#xff0c;如果直接使用函数调用或者 API 调用的方式&#xff0c;会造成模块之间的耦合…...

network HCIE认证

#1 ip地址设置 ip add 192.168.1.1 255.255.255.0 ip add 192.168.1.2 255.255.255.0 #2 DHCP 交换机上配置 system-view //进入系统配置 dhcp enable int g0/0/1 //接入接口管理 dhcp select interface //配置dncp选择接口 #3 DNS域名系统 int g0/0/1 dhcp server dn…...

造纸粉体分散机、改性包覆机、改性打散机

包覆改性机在造纸填料中的应用是近年来造纸行业技术创新的一个重要方向。通过包覆改性&#xff0c;可以改善填料的表面性质&#xff0c;提升其在纸张中的留着率和分布均匀性&#xff0c;进而增强纸张的性能&#xff0c;降低生产成本。以下是包覆改性机在造纸填料中的具体应用及…...

npm入门教程1:npm简介

一、基本概述 定义&#xff1a;npm是一个开源的JavaScript包管理器&#xff0c;它允许开发者下载、安装、发布和管理Node.js包。地位&#xff1a;npm是Node.js生态系统中不可或缺的一部分&#xff0c;为开发者提供了丰富的第三方库和工具。起源&#xff1a;npm由Isaac Z. Schl…...

Vue3使用AntV | X6绘制流程图:开箱即用

x6官方地址X6图编辑引擎 | AntV 官方文档仔细地介绍了很多丰富的功能&#xff0c;这里的demo可以满足基本的使用&#xff0c;具体拓展还需要仔细看文档内容 先上效果图 1、安装 通过 npm 或 yarn 命令安装 X6。 # npm npm install antv/x6 --save# yarn yarn add antv/x6 …...

grpc 快速入门

gRPC 是一个现代的远程过程调用&#xff08;RPC&#xff09;框架&#xff0c;由 Google 开发。它使用 HTTP/2 作为传输协议&#xff0c;并采用 Protocol Buffers&#xff08;protobuf&#xff09;作为接口描述语言&#xff08;IDL&#xff09;。gRPC 提供高效的通信、语言无关性…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...