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

news2024/12/23 18:38:31

  • 博客主页: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. 点击运行,查看结果
    在这里插入图片描述

在这里插入图片描述

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

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

相关文章

顺序栈的实现

顺序栈是用数组实现的&#xff1a;&#xff08;假设我们有8个位置&#xff08;下标0-7&#xff09;&#xff09; #include<stdio.h> #include<malloc.h> #include<assert.h> #include <iostream> #define MAX_SIZE 8#define Elemtype int typedef str…

Android 配置 Kapt 编译器插件

以 Android Studio 2023.3.1 最新版本为准。 步骤1:打开版本信息配置文件 找到libs.versions.toml文件。 这是打开后的样子&#xff1a; 步骤2&#xff1a;配置版本信息 你需要在[plugins]下面添加一条kapt的配置信息&#xff1a; 要添加的配置信息如下&#xff1a; jetbr…

YOLOv8_pose的训练、验证、预测及导出[关键点检测实践篇]

1.关键点数据集划分和配置 从上面得到的数据还不能够直接训练,需要按照一定的比例划分训练集和验证集,并按照下面的结构来存放数据,划分代码如下所示,该部分内容和YOLOv8的训练、验证、预测及导出[目标检测实践篇]_yolov8训练测试验证-CSDN博客是重复的,代码如下: …

粒子辐照环境中相机镜头防护及LabVIEW图像处理注意事项

在粒子辐照环境测试电路板性能的实验中&#xff0c;需要对相机镜头进行有效防护&#xff0c;同时利用LabVIEW进行图像识别和处理。本文将讨论相机镜头防护的关键因素和LabVIEW处理过程中的注意事项&#xff0c;包括防辐射材料选择、辐射屏蔽措施、散热管理、空间布局及LabVIEW软…

CorelCAD v2022.5 解锁版 安装教程(2D制图 3D设计和打印的简化软件)

前言 CorelCAD&#xff0c;加拿大Corel公司开发的一款适用于2D制图、3D设计和打印的简化版CAD软件。它是款专业的2D制图和3D设计软件&#xff0c;拥有行业标准文件兼容性&#xff0c;支持 .DWG、.STL、.PDF、 .CDR*等文件格式&#xff0c;轻松实现协作和项目共享&#xff0c;利…

6818 android 修改开机 logo, 编译脚本分析

问题&#xff1a; 客户需要去掉 android5.1 的开机logo. 说明&#xff1a; 对于Android5.1 来说&#xff0c;uboot 与kernel 的logo 是一个。 过程&#xff1a; 其实对于开机logo 的修改很简单&#xff0c;直接参考厂家手册就可以了。 这是 android4.4 的开机logo 的修改&…

Qt | QStackedLayout 类(分组布局或栈布局)、QStackedWidget

01、QStackedLayout 类 1、使用 QStackedLayout 可以实现一个多页面切换的界面,多 页面切换就是类似于选项卡(如右图)类型的界面。 2、QStackedLayout 并没有直接实现多页面切换的办面,只是我们可以通过该类实现多页面切 换的功能,因此要使用 QStackedLayout 类实现多面面…

LeetCode 第399场周赛个人题解

100323. 优质数对的总数 I 原题链接 100323. 优质数对的总数 I 思路分析 签到题 AC代码 class Solution:def numberOfPairs(self, nums1: List[int], nums2: List[int], k: int) -> int:n, m len(nums1), len(nums2)ret 0for i in range(n):for j in range(m):if nu…

GDPU JavaWeb mvc模式

搭建一个mvc框架的小实例。 简易计算器 有一个名为inputNumber.jsp的页面提供一个表单&#xff0c;用户可以通过表单输入两个数和运算符号提交给Servlet控制器&#xff1b;由名为ComputerBean.java生成的JavaBean负责存储运算数、运算符号和运算结果&#xff0c;由名为handleCo…

qt-C++笔记之使用QtConcurrent异步地执行槽函数中的内容,使其不阻塞主界面

qt-C笔记之使用QtConcurrent异步地执行槽函数中的内容&#xff0c;使其不阻塞主界面 code review! 参考博文&#xff1a; qt-C笔记之使用QtConcurrent异步地执行槽函数中的内容&#xff0c;使其不阻塞主界面 qt-C笔记之QThread使用 文章目录 qt-C笔记之使用QtConcurrent异步地…

23种设计模式顺口溜

口诀&#xff1a; 原型 抽风 &#xff0c;单独 建造 工厂 &#xff08;寓意&#xff1a;&#xff08;这里代指本来很简单的东西&#xff0c;却要干工厂这里复杂的业务&#xff09; 抽风&#xff1a;抽象工厂单独&#xff1a;单例桥代理组合享元适配器&#xff0c;&#xff0…

【SpringBoot】SpringBoot中防止接口重复提交(单机环境和分布式环境)

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 &#x1f33c;前言 &#x1f512;单机环境下防止接口重复提交 &#x1f4d5;导入依赖 &#x1f4c2;项目结构 &#x1f680;创建自定义注解 ✈创建AOP切面 &#x1f697;创建Conotroller &#x1f4bb;分布…

mysql实战——Mysql8.0高可用之双主+keepalived

一、介绍 利用keepalived实现Mysql数据库的高可用&#xff0c;KeepalivedMysql双主来实现MYSQL-HA&#xff0c;两台Mysql数据库的数据保持完全一致&#xff0c;实现方法是两台Mysql互为主从关系&#xff0c;通过keepalived配置VIP&#xff0c;实现当其中的一台Mysql数据库宕机…

YOLOv9改进策略 | 图像去雾 | 利用图像去雾网络UnfogNet辅助YOLOv9进行图像去雾检测(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是利用UnfogNet超轻量化图像去雾网络,我将该网络结合YOLOv9针对图像进行去雾检测(也适用于一些模糊场景),我将该网络结构和YOLOv9的网络进行结合同时该网络的结构的参数量非常的小,我们将其添加到模型里增加的计算量和参数量基本可…

2000 年至 2015 年中国(即水稻、小麦和玉米1km 网格)三种主要作物年收获面积的时空变化

摘要 可靠、连续的主要作物收获面积信息对于研究地表动态和制定影响农业生产、土地利用和可持续发展的政策至关重要。然而&#xff0c;中国目前还没有高分辨率的空间明确和时间连续的作物收获面积信息。全国范围内主要农作物收获面积的时空格局也鲜有研究。在本研究中&#xf…

家政服务|基于SprinBoot+vue的家政服务管理平台(源码+数据库+文档)

家政服务管理平台 目录 基于SprinBootvue的家政服务管理平台 一、前言 二、系统设计 三、系统功能设计 1前台模块设计 2后台功能模块 5.2.1管理员功能模块 5.2.2用户功能模块 5.2.3服务人员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕…

Linux:进程地址空间、进程控制(一.进程创建、进程终止、进程等待)

上次介绍了环境变量&#xff1a;Linux&#xff1a;进程概念&#xff08;四.main函数的参数、环境变量及其相关操作&#xff09; 文章目录 1.程序地址空间知识点总结上述空间排布结构是在内存吗&#xff1f;&#xff08;进程地址空间引入&#xff09; 2.进程地址空间明确几个点进…

Java 对接百度网盘

文章目录 前言一、创建百度网盘账号二、代码实现1. 常量类2. 工具类3. 授权码模式授权4. 文件分片上传&#xff08;可获取进度&#xff09;--方法一5. 文件下载(可获取进度)--方法一6. 获取文件列表7. 文件分片上传&#xff08;不可获取进度&#xff09;--方法二7. 文件下载&am…

[数据集][目标检测]手枪机枪刀检测数据集VOC+YOLO格式5990张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;5990 标注数量(xml文件个数)&#xff1a;5990 标注数量(txt文件个数)&#xff1a;5990 标注…

健身房会员管理系统服务预约小程序的作用是什么

拥有完美身材/减肥/锻炼等前往健身房是个不错的选择&#xff0c;商家生意开展需要吸引同城客户并转化&#xff0c;客户也有自己的判断需要找到更全面的场地&#xff1b;完善客户消费流程利于品牌发展和不断获客转化。 运用【雨科】平台搭建健身房管理系统小程序&#xff0c;多…