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

【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. 图形化创建菜单栏各组件

  1. 在打开Qt自带的ui文件界面后,得到以下界面
    在这里插入图片描述
  2. 双击点击界面中(在这里输入),在菜单栏中进行添加菜单
    在这里插入图片描述
  3. 在上述创建菜单后,界面发生改变得到以下界面
    在这里插入图片描述
  4. 点击创建好的菜单,双击在这里输入,添加菜单项(新建)注意:由于Qt在此处存在BUG,中文菜单项需要复制粘贴的方式进行添加。
    在这里插入图片描述
  5. 添加子菜单及子菜单项
    在这里插入图片描述
  6. 添加分隔符
    在这里插入图片描述
  7. 点击运行,查看结果
    在这里插入图片描述

在这里插入图片描述

相关文章:

【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt窗口 | 菜单栏 | QMenuBar的使用及说明 文章编号:Qt 学习…...

Spark运行模式详解

Spark概述 Spark 可以在多种不同的运行模式下执行,每种模式都有其自身的特点和适用场景。 部署Spark集群大体上分为两种模式:单机模式与集群模式。大多数分布式框架都支持单机模式,方便开发者调试框架的运行环境。但是在生产环境中&#xff…...

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) 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 &#x1…...

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…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

Cursor实现用excel数据填充word模版的方法

cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

docker详细操作--未完待续

docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

基于 TAPD 进行项目管理

起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...

WebRTC调研

WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...