【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明
- 博客主页:Duck Bro 博客主页
- 系列专栏:Qt 专栏
- 关注博主,后期持续更新系列文章
- 如果有错误感谢请大家批评指出,及时修改
- 感谢大家点赞👍收藏⭐评论✍
Qt窗口 | 菜单栏 | QMenuBar的使用及说明
文章编号:Qt 学习笔记 / 47
文章目录
- Qt窗口 | 菜单栏 | QMenuBar的使用及说明
- 一、菜单栏
- 1. 什么是菜单栏
- 2. 菜单栏的组成控件
- 二、代码创建菜单栏及各组件
- 1. 创建菜单栏
- 2. 创建菜单
- 3. 创建菜单项
- 4. 添加分割线
- 5. 添加快捷键
- 6. 添加子菜单
- 7. 添加图标
- 8. 文件完整代码
- 三、图形化创建菜单栏及各组件
- 1. 创建以QMainWindow为基类的项目
- 2. 图形化创建菜单栏各组件
一、菜单栏
1. 什么是菜单栏
菜单栏是指在计算机程序或操作系统界面上的一个水平条,通常位于顶部或顶部附近,用来显示各种功能选项和操作命令。
菜单栏通常包含多个菜单,每个菜单都有一个标题和一系列相关的命令或选项。用户可以通过点击菜单标题或者在菜单栏上的相应按钮来打开菜单,并从中选择需要的操作。
在菜单栏中,常见的命令包括文件(File)、编辑(Edit)、视图(View)、工具(Tools)、帮助(Help)等,不同的程序或操作系统可能会有不同的菜单栏布局和选项。菜单栏为用户提供了一种直观、可视化的方式来浏览和选择程序的各种功能和操作。
2. 菜单栏的组成控件

-
菜单:菜单是菜单栏的核心组件,用来展示可选的操作项或功能。菜单通常以垂直列表的形式呈现,每个菜单项都可以点击或悬停以显示子菜单或执行相应的操作。
-
下拉菜单:下拉菜单是菜单栏中的特殊菜单项,点击或悬停在这些菜单项上,会展开一个子菜单,用户可以进一步选择所需的操作。
-
菜单项:是菜单栏中的可选操作或功能的单个项目。每个菜单项通常由一个标签或文本描述以及相应的操作或功能组成。
-
分隔符:分隔符是菜单栏中的一条水平线,用于在菜单中分隔不同的菜单项,使菜单更加清晰易读。分隔符一般用于将相似的菜单项分组,或者将不同类型的菜单项分隔开。
二、代码创建菜单栏及各组件
1. 创建菜单栏
步骤流程

创建菜单栏
创建的两种方式:
- 菜单栏的创建可以借助于 QMainWindow类 提供的 menuBar() 函数来实现。
- 在堆上动态创建
使用setMenuBar把菜单栏放到窗口中
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//QMenuBar* menubar = new QMenuBar();//创建菜单栏QMenuBar* menubar = this->menuBar(); //推荐使用这种方法//菜单栏放入窗口中this->setMenuBar(menubar);
}
运行结果
注意:现在是只有菜单栏,菜单栏中没有菜单所以显示空白

2. 创建菜单
步骤流程

创建菜单,添加菜单到菜单栏
//创建菜单
QMenu* menu1 = new QMenu("文件");
QMenu* menu2 = new QMenu("编辑");
QMenu* menu3 = new QMenu("构建");
//添加菜单到菜单栏中
menubar->addMenu(menu1);
menubar->addMenu(menu2);
menubar->addMenu(menu3);
运行结果

3. 创建菜单项
步骤流程

创建菜单,添加菜单到菜单栏
QAction 可以给菜单栏使⽤, 也可以给⼯具栏使⽤.
//创建菜单项
QAction* action1 = new QAction("新建");
QAction* action2 = new QAction("打开");
QAction* action3 = new QAction("保存");
//添加菜单项到菜单中
menu1->addAction(action1);
menu1->addAction(action2);
menu1->addAction(action3);
运行结果

4. 添加分割线
步骤流程

添加分割线
//添加菜单项到菜单中
menu1->addAction(action1);
//在新建和保存中添加分割线
menu1->addSeparator();
menu1->addAction(action2);
menu1->addAction(action3);
运行结果

5. 添加快捷键
使用&+字母,给文本中进行添加快捷键
QMenu* menu1 = new QMenu("文件(&A)"); //添加快捷键 &+字母
QMenu* menu2 = new QMenu("编辑(&M)"); //使用Alt+字母触发
QMenu* menu3 = new QMenu("构建(&G)");
运行结果

6. 添加子菜单
创建父菜单和子菜单,把子菜单添加到父菜单
//创建菜单
QMenu* menuparent = new QMenu("父菜单");
QMenu* menuchild = new QMenu("子菜单");
//添加菜单到菜单栏中
menubar->addMenu(menuparent);
menuparent->addMenu(menuchild);
运行结果

7. 添加图标
在阿里巴巴矢量图标库中进行查看合适的图标,如下图

将图片加入到qrc文件中,详细步骤参考文章:qrc文件机制

将图片添加到菜单项中
//创建菜单项QAction* action1 = new QAction("新建");//添加新建图标action1->setIcon(QIcon(":/add.png"));QAction* action2 = new QAction("打开");QAction* action3 = new QAction("保存");//添加保存图标action3->setIcon(QIcon(":/save.png"));
运行结果

8. 文件完整代码
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//QMenuBar* menubar = new QMenuBar();//创建菜单栏QMenuBar* menubar = this->menuBar(); //推荐使用这种方法//菜单栏放入窗口中this->setMenuBar(menubar);//创建菜单QMenu* menu1 = new QMenu("文件(&A)"); //添加快捷键 &+字母QMenu* menu2 = new QMenu("编辑(&M)");QMenu* menu3 = new QMenu("构建(&G)");QMenu* menuparent = new QMenu("父菜单");QMenu* menuchild = new QMenu("子菜单");//添加菜单到菜单栏中menubar->addMenu(menu1);menubar->addMenu(menu2);menubar->addMenu(menu3);menubar->addMenu(menuparent);menuparent->addMenu(menuchild);//创建菜单项QAction* action1 = new QAction("新建");//添加新建图标action1->setIcon(QIcon(":/add.png"));QAction* action2 = new QAction("打开");QAction* action3 = new QAction("保存");//添加保存图标action3->setIcon(QIcon(":/save.png"));//添加菜单项到菜单中menu1->addAction(action1);//在新建和保存中添加分割线menu1->addSeparator();menu1->addAction(action2);menu1->addAction(action3);}MainWindow::~MainWindow()
{delete ui;
}
三、图形化创建菜单栏及各组件
1. 创建以QMainWindow为基类的项目
过程参考文章Qt窗口 | Qt窗口介绍 | QMainwindow类及各组件介绍
2. 图形化创建菜单栏各组件
- 在打开Qt自带的ui文件界面后,得到以下界面

- 双击点击界面中(在这里输入),在菜单栏中进行添加菜单

- 在上述创建菜单后,界面发生改变得到以下界面

- 点击创建好的菜单,双击在这里输入,添加菜单项(新建)
注意:由于Qt在此处存在BUG,中文菜单项需要复制粘贴的方式进行添加。

- 添加子菜单及子菜单项

- 添加分隔符

- 点击运行,查看结果


相关文章:
【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明
博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt窗口 | 菜单栏 | QMenuBar的使用及说明 文章编号:Qt 学习…...
Spark运行模式详解
Spark概述 Spark 可以在多种不同的运行模式下执行,每种模式都有其自身的特点和适用场景。 部署Spark集群大体上分为两种模式:单机模式与集群模式。大多数分布式框架都支持单机模式,方便开发者调试框架的运行环境。但是在生产环境中ÿ…...
vcpkg环境配置
vcpkg 使用linux相关库,设置环境变量VCPKG_ROOT,设置cmake工具链$VCPKG_ROOT/scripts\buildsystems\vcpkg.cmake set VCPKG_DEFAULT_TRIPLETx64-windows .\vcpkg.exe install fftw3 freetype gettext glibmm gtkmm libjpeg-turbo libpng libxmlpp libs…...
python学习:基础语句
目录 条件语句 循环语句 for 循环 while 循环 break continue 条件语句 Python提供了 if、elif、else 来进行逻辑判断。格式如下: Pythonif 判断条件1: 执行语句1... elif 判断条件2: 执行语句2... elif 判断条件3: 执行语句3... else: 执行语句4…...
Nginx限制IP访问详解
在Web服务器管理中,限制某些IP地址访问网站是一个常见的需求。Nginx作为一款高性能的HTTP服务器和反向代理服务器,提供了灵活强大的配置选项来实现这一功能。本文将详细讲解如何在Nginx中限制IP访问,并通过示例代码展示具体操作。 一、Nginx…...
Three.js——二维平面、二维圆、自定义二维图形、立方体、球体、圆柱体、圆环、扭结、多面体、文字
个人简介 👀个人主页: 前端杂货铺 ⚡开源项目: rich-vue3 (基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL) 🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展 …...
24年湖南教资认定即将开始,别被照片卡审!
24年湖南教资认定即将开始,别被照片卡审!...
数据库(8)——DML数据操作
增添数据 给指定字段添加数据 INSERT INTO 表名 (字段名1,字段名2,...)VALUES(值1,值2...); 没有的添加的字段默认为NULL。 给全部字段添加数据 INSERT INTO 表名 VALUE (值1,值2,....值n); 此时值的顺序对应表中字段的顺序 批量添加数据 INSERT INTO 表名(字段1,…...
Gitee在已有项目基础上创建仓库中遇到的问题和解决
问题一:fatal: remote origin already exists 解释:当前仓库添加了一个名为"origin"的远程仓库配置,此时输入 git remote add origin https://xxx就会提示上面的内容。 解决方案1:移除旧的origin git remote remove origin 解决方案…...
【推荐算法-特征工程】每种item单侧特征,都可产生对应user单侧特征
比如item的平均成单价格,可以分成10个档位,作为一个标签值打在item上, 那么对应user对item的click用户行为,就能产生user-click的10个档位作为特征值 作为user的标签。 比如item的平均点击率,也可以分成比如20个档位…...
一行代码实现UI拖拽的效果
演示 先来看效果吧! 实现方式 1.首先创建一个你想拖动的UI图片 2.创建一个C#的脚本 3.编写控制脚本(代码按我的敲就行) 付上代码片段 public void OnDrag(PointerEventData eventData){transform.position eventData.position;} 4.添加脚…...
【Linux】TCP协议【下一】{三次握手/四次挥手的深度解读==状态变化}
文章目录 本篇知识需要有TCP协议【中】的知识!详情点击👇1.测试一:服务器start函数不定义任何行为(不调用accept)的三次握手状态变化int listen(int sockfd, int backlog);的backlog参数全连接队列当全连接队列已满&am…...
【C语言回顾】编译和链接
前言1. 编译2. 链接结语 上期回顾: 【C语言回顾】文件操作 个人主页:C_GUIQU 归属专栏:【C语言学习】 前言 各位小伙伴大家好!上期小编给大家讲解了C语言中的文件操作,接下来我们讲解一下编译和链接! 1. 编译 预处理…...
2024年5月27日 十二生肖 今日运势
小运播报:2024年5月27日,星期一,农历四月二十 (甲辰年己巳月辛卯日),法定工作日。 红榜生肖:羊、蛇、狗 需要注意:鼠、鸡、龙 喜神方位:西南方 财神方位:…...
【Text2SQL 论文】SeaD:使用 Schema-aware 去噪训练的 end2end 的 Text2SQL
论文:SeaD: End-to-end Text-to-SQL Generation with Schema-aware Denoising ⭐⭐ NAACL 2022, arXiv:2105.07911 本论文提出 SeaD 模型,使用 schema-aware 的去噪方法来训练一个 end2end、seq2seq 的 Transformer 模型来实现 Text2SQL。 一、论文速读…...
python数据分析——apply 1
参考资料:活用pandas库 apply是指把函数同时作用于DataFrame的每一行或每一列。类似于编写一些跨每行或每列的for循环,并同时调用apply函数。 1、函数 函数是对python代码进行分组和复用的一种方法。如果某段代码会被多次使用,并且使用时是需…...
Spring Boot 项目统一异常处理
在 Spring Boot 项目开发中,异常处理是一个非常重要的环节。良好的异常处理不仅能提高应用的健壮性,还能提升用户体验。本文将介绍如何在 Spring Boot 项目中实现统一异常处理。 统一异常处理有以下几个优点: 提高代码可维护性:…...
安卓手机APP开发__网络连接性支持VPN
安卓手机APP开发__网络连接性支持VPN 安卓提供了API给开发者,来创建一个虚拟的私有网络(VPN)的解决方案. 根据这里的介绍,你能知道如何开发和测试你的针对安卓设备的VPN的客户端. 概述 VPN允许设备为了安全地连接网络,而没有物理性的连接在一个网络上. 安卓包括了一个内嵌的…...
Shopee单个商品详情采集
Shopee商品详情页数据采集实战 作为东南亚地区最大的电商平台之一,Shopee拥有超过3亿活跃用户。对于跨境电商企业、市场分析师等角色而言,从Shopee获取商品数据是非常有价值的。本文将介绍如何使用Python程序采集Shopee单个商品详情页数据。 1. 确定采集目标和技术方案 确定…...
深入研究Qt Meta - Object System
目录 先说RTTI 再说QMeta Object System 关于Q_OBJECT 这篇文章我打算研究一下QMetaObject System,也就是Qt自己构建起来的元对象系统。 先说RTTI 啥是RTTI?这是C编程里的一个常见术语,全称是:运行阶段类型识别(Ru…...
10.1软件工程概述-CMM-软件过程模型-逆向工程
一、软件工程基础知识 00:00 1. 软件工程概述 03:10 考试重要性:本章节每年考察12-15分,涉及选择题、案例和论文三种题型,重要性仅次于系统架构设计。内容特点:新版教材对概念定义改动较大,但…...
Scanpy进阶可视化--UMAP科研级图表定制
1. 从基础到进阶:UMAP科研级图表的核心要素 单细胞数据分析中,UMAP图是最常用的可视化工具之一。但很多研究者都会遇到这样的困扰:为什么我的UMAP图看起来总是差强人意?其实,科研级UMAP图与普通UMAP图的区别࿰…...
SDXL-Turbo快速上手指南:无需插件、纯Diffusers架构的极简部署方案
SDXL-Turbo快速上手指南:无需插件、纯Diffusers架构的极简部署方案 你有没有想过,AI绘画能快到什么程度?是等上几十秒,还是几分钟?如果我告诉你,现在有一种方案,能让AI在你敲下键盘的瞬间就给出…...
Milvus向量库内存暴涨:踩坑实录与解决思路
研一升研二,时间还相当充裕。你现在的方向很对,继续把项目做深做透,同时拓展一下搜推广的知识面,明年找实习问题不大。现在大部分公司的LLM业务岗,说白了,干的还是SFT和RAG那点事,顶多加个Agent…...
智能图像识别自动点击:解放双手的安卓自动化神器
智能图像识别自动点击:解放双手的安卓自动化神器 【免费下载链接】Smart-AutoClicker An open-source auto clicker on images for Android 项目地址: https://gitcode.com/gh_mirrors/smar/Smart-AutoClicker 你是否曾遇到这样的困境:游戏中需要…...
3种方法实现微信聊天记录完整备份:WeChatExporter的高效实用指南
3种方法实现微信聊天记录完整备份:WeChatExporter的高效实用指南 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 在数字时代,微信聊天记录承载着我…...
本地连接MySql数据库报错??
提示: idea本地连接数据库,然后Failed Copy Search Error Troubleshooting DBMS: MySQL (no ver.) Case sensitivity: plainmixed, delimitedexact Communications link failure The last packet sent successfully to the server was 0 millisec…...
3个核心突破:ParsecVDD如何用虚拟显示技术解决多屏扩展难题
3个核心突破:ParsecVDD如何用虚拟显示技术解决多屏扩展难题 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd 在远程协作、游戏串流和多任务处理成为常态的今天…...
Phi-4-reasoning-vision-15B入门必看:视觉推理模型prompt工程要点
Phi-4-reasoning-vision-15B入门必看:视觉推理模型prompt工程要点 如果你刚接触Phi-4-reasoning-vision-15B,可能会发现一个奇怪的现象:有时候它像个博学的学者,能精准分析复杂的图表;有时候却像个固执的程序员&#…...
Blender中ACES色彩空间的配置与优化指南
1. 为什么要在Blender中使用ACES色彩空间 第一次在Blender中渲染出图时,我总觉得色彩看起来怪怪的——明明在软件里看着很鲜艳的颜色,导出后却变得灰暗;不同设备上查看同一张图,色彩表现也各不相同。后来才发现,这其实…...
