【Qt】菜单栏

目录

菜单栏

例子:创建菜单栏、菜单、菜单项

例子:给菜单设置快捷键

例子:给菜单项设置快捷键

例子:添加子菜单

例子:添加分隔线

例子:添加图标


菜单栏

Qt中的菜单栏是通过QMenuBar这个类实现的,一个主窗口最多只有一个菜单栏,位于主窗口顶部、主窗口标题栏下面。

  • 菜单栏中包含菜单,菜单中包含菜单项

打开Qt,此时需要将Base class更改为QMainWindow.

进行Qt Designer,看到QMainWindow与QWidget的区别:

在菜单栏中创建新的菜单,运行程序:

在菜单中添加菜单项,运行程序:

例子:创建菜单栏、菜单、菜单项

(1)编写代码,创建菜单栏,并将菜单栏设置到窗口。

(2)编写代码,创建菜单,并将菜单添加到菜单栏

(3)编写代码,创建菜单项,并将菜单项添加到菜单中

(4)编写代码,点击“退出”,触发信号 triggered ,并退出

(5)运行程序

(6)代码展示

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 创建菜单栏,并将菜单栏设置到窗口QMenuBar* menuBar = new QMenuBar();this->setMenuBar(menuBar);// 创建菜单,并将菜单设置到菜单栏QMenu* menu1 = new QMenu("文件");QMenu* menu2 = new QMenu("编辑");QMenu* menu3 = new QMenu("工具");QMenu* menu4 = new QMenu("帮助");menuBar->addMenu(menu1);menuBar->addMenu(menu2);menuBar->addMenu(menu3);menuBar->addMenu(menu4);// 创建菜单项,并将菜单项添加到菜单中QAction* action1 = new QAction("新建");QAction* action2 = new QAction("保存");QAction* action3 = new QAction("另存为");QAction* action4 = new QAction("退出");menu1->addAction(action1);menu1->addAction(action2);menu1->addAction(action3);menu1->addAction(action4);// 编写退出信号connect(action4, &QAction::triggered, this, &QMainWindow::close);}MainWindow::~MainWindow()
{delete ui;
}

例子:给菜单设置快捷键

给菜单和菜单项设置快捷键,设置好快捷键就可以搭配alt来进行使用了。

(1)创建菜单栏、菜单、菜单项

(2)添加快捷键

通过给文本中添加 &F 这样的操作,就是添加了快捷键alt + F。

(在之前没有图形化界面的时候,文本编辑器都是靠类似风格的快捷键来进行操作的)

同时,也可以使用QShortCut来实现类似的效果,但是太过麻烦。

(3)执行程序

最后&这个符号,并不会在界面上显示

(4)代码展示

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 创建菜单栏,并将菜单栏设置到窗口QMenuBar* menuBar = new QMenuBar();this->setMenuBar(menuBar);// 创建菜单,将菜单添加到菜单栏QMenu* menu1 = new QMenu("文件 (&F)");QMenu* menu2 = new QMenu("编辑 (&E)");QMenu* menu3 = new QMenu("视图 (&V)");QMenu* menu4 = new QMenu("关于 (&A)");menuBar->addMenu(menu1);menuBar->addMenu(menu2);menuBar->addMenu(menu3);menuBar->addMenu(menu4);// 创建菜单项,将菜单项添加到菜单里面QAction* action1 = new QAction("菜单项1");QAction* action2 = new QAction("菜单项2");QAction* action3 = new QAction("菜单项3");QAction* action4 = new QAction("菜单项4");menu1->addAction(action1);menu2->addAction(action2);menu3->addAction(action3);menu4->addAction(action4);
}MainWindow::~MainWindow()
{delete ui;
}

例子:给菜单项设置快捷键

(1)创建菜单栏、菜单、菜单项

(2)给菜单项添加快捷键

(3)执行项目

(4)代码展示

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 创建菜单栏,并将菜单设置在窗口QMenuBar* menuBar = new QMenuBar();this->setMenuBar(menuBar);// 创建菜单,并将菜单添加到菜单栏QMenu* menu1 = new QMenu("文件(&F)");QMenu* menu2 = new QMenu("编辑(&E)");QMenu* menu3 = new QMenu("关于(&A)");menuBar->addMenu(menu1);menuBar->addMenu(menu2);menuBar->addMenu(menu3);// 创建菜单项,并将菜单项添加到菜单QAction* action1 = new QAction("菜单项1(&Z)");QAction* action2 = new QAction("菜单项2(&X)");QAction* action3 = new QAction("菜单项3(&C)");QAction* action4 = new QAction("菜单项4(&V)");menu1->addAction(action1);menu1->addAction(action2);menu1->addAction(action3);menu1->addAction(action4);
}MainWindow::~MainWindow()
{delete ui;
}

例子:添加子菜单

菜单栏->菜单->菜单项

菜单栏->菜单->子菜单->子菜单->菜单项

QMenu 类也提供了addMenu()这个函数,以便添加子菜单。

(1)创建菜单栏,菜单

(2)在菜单1中添加子菜单1和菜单项

(3)在子菜单1中添加子菜单

(4)运行程序

(5)代码展示

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 菜单栏QMenuBar* menuBar = new QMenuBar();this->setMenuBar(menuBar);// 菜单QMenu* menu1 = new QMenu("菜单1");QMenu* menu2 = new QMenu("菜单2");QMenu* menu3 = new QMenu("菜单3");menuBar->addMenu(menu1);menuBar->addMenu(menu2);menuBar->addMenu(menu3);// 在菜单1中添加子菜单与菜单项QMenu* menuChild1 = new QMenu("子菜单1");QMenu* menuChild2 = new QMenu("子菜单2");QMenu* menuChild3 = new QMenu("子菜单3");menu1->addMenu(menuChild1);menu1->addMenu(menuChild2);menu1->addMenu(menuChild3);QAction* action1 = new QAction("菜单项1");QAction* action2 = new QAction("菜单项2");QAction* action3 = new QAction("菜单项3");menu1->addAction(action1);menu1->addAction(action2);menu1->addAction(action3);// 在子菜单1中添加子菜单与菜单项QMenu* menuChildChild1 = new QMenu("子菜单11");QMenu* menuChildChild2 = new QMenu("子菜单12");QMenu* menuChildChild3 = new QMenu("子菜单13");menuChild1->addMenu(menuChildChild1);menuChild1->addMenu(menuChildChild2);menuChild1->addMenu(menuChildChild3);QAction* action11 = new QAction("菜单项11");QAction* action12 = new QAction("菜单项12");QAction* action13 = new QAction("菜单项13");menuChild1->addAction(action11);menuChild1->addAction(action12);menuChild1->addAction(action13);
}MainWindow::~MainWindow()
{delete ui;
}

例子:添加分隔线

在菜单中,菜单项如果比较多,就可以通过分割线进行分组。

在QMenu中,提供了addSeparator函数进行菜单项的分隔。

(1)创建菜单栏,菜单及俩个菜单项

(2)在俩个菜单项之间使用addSeparator函数添加分割线

 

(3)执行程序

(4)代码展示

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 创建菜单栏,菜单及俩个菜单项QMenuBar* menuBar = new QMenuBar();this->setMenuBar(menuBar);QMenu* menu = new QMenu("菜单");menuBar->addMenu(menu);QAction* action1 = new QAction("菜单项1");QAction* action2 = new QAction("菜单项2");menu->addAction(action1);// 在俩个菜单项之间使用addSeparator函数添加分割线menu->addSeparator();menu->addAction(action2);
}MainWindow::~MainWindow()
{delete ui;
}

例子:添加图标

使用QIcon中的setIcon()函数进行添加图标。

(1)创建菜单栏、菜单和俩个菜单项

(2)将准备好的图标添加在所在文件

(3)给菜单添加图标

  

(4)给俩个菜单项添加图标

(5)执行程序

(6)代码展示

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 设置菜单栏、菜单和俩个菜单项QMenuBar* menuBar = new QMenuBar();this->setMenuBar(menuBar);QMenu* menu = new QMenu("文件");menuBar->addMenu(menu);// 给菜单添加图标menu->setIcon(QIcon(":/icon/file.png"));QAction* action1 = new QAction("新建");QAction* action2 = new QAction("打印");menu->addAction(action1);// 给新建添加图标action1->setIcon(QIcon(":/icon/new.png"));menu->addAction(action2);// 给打印添加图标action2->setIcon(QIcon(":/icon/print.png"));}MainWindow::~MainWindow()
{delete ui;
}

如果给QMenu设置图标,当前QMenu是在QMenuBar上的,此时文本就不会显示,图标会覆盖文本;而QMenu如果是子菜单,则文本和图标都会进行显示。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL:复合查询

MySQL:复合查询 聚合统计分组聚合统计group byhaving 多表查询自连接子查询单行子查询多行子查询多列子查询from子查询 合并查询unionunion all 内连接外连接左外连接右外连接全外连接 视图 MySQL 复合查询是数据分析和统计的强大工具,本博客将介绍如何使…

当AI遇上制药:加速跑向未来的快车道,还是布满荆棘的征途?

01 在全球科技领域,AI的崛起无疑掀起了一场变革的风暴,其影响力已渗透至各行各业,促使各领域积极寻求与AI技术的深度融合,以提升效率、创新产品及优化服务。在医疗健康领域,AI与制药的结合自2007年起航,历…

第八周:机器学习

目录 摘要 Abstract 一、注意力机制V.S.自注意力机制 1、引入 2、注意力机制 3、自注意力机制 二、自注意力机制 1、输入 2、输出 3、序列标注 4、Multi-head Self-attention 5、比较 总结 摘要 前两周学习了CNN的基本架构,针对全局信息的考虑问题&…

行为识别实战第二天——Yolov5+SlowFast+deepsort: Action Detection(PytorchVideo)

Yolov5SlowFastdeepsort 一、简介 YoloV5SlowFastDeepSort 是一个结合了目标检测、动作识别和目标跟踪技术的视频处理框架。这一集成系统利用了各自领域中的先进技术,为视频监控、体育分析、人机交互等应用提供了一种强大的解决方案。 1. 组件说明: Y…

如何通过住宅代理进行高效SSL检查

引言 什么是SSL检查?有哪些内容? 为什么要使用SSL检查? SSL检查是如何进行的? 总结 引言 在现代互联网环境中,SSL/TLS协议已成为确保网络通信安全的基石。随着网络攻击手段的不断演进,仅仅依赖于基础的…

数据中心和算力中心的区别

数据中心(Data Center)和算力中心(Computing Power Center 或 HPC Center)虽然都涉及数据处理和存储,但它们的重点和用途有所不同。下面将详细介绍两者之间的区别: 数据中心(Data Center&#x…

torch、torchvision、torchtext版本兼容问题

1、torch与torchtext版本兼容 参考torchtext PyPI 2、 torch与torchvision版本兼容 参考torchvision PyPI

【最新华为OD机试E卷】最长连续方波信号(200分)-多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,…

从跟跑到领跑:AIGC时代国产游戏的崛起与展望

引言 在人工智能技术快速发展的背景下,AIGC(人工智能生成内容)时代的到来正在重新定义游戏产业的未来。人工智能技术,尤其是生成对抗网络(GAN)、自然语言处理(NLP)、深度学习等领域的突破,正在为游戏开发带来前所未有的机会和挑战。这些技术不仅改变了游戏内容的创作…

51单片机-定时器介绍

时间:2024.8.31 作者:Whappy 目的:手撕51 代码: 现象:

UnrealEngine学习(01):安装虚幻引擎

1. 下载安装 Epic Games 目前下载UE引擎需要先下载Epic Games,官网为我们提供了下载路径: https://www.unrealengine.com/zh-CN/downloadhttps://www.unrealengine.com/zh-CN/download 我们点击图中步骤一即可进行下载。 注释:Unreal Engi…

揭秘扩散模型:DDPM的数学基础与代码实现全攻略!

(DDPM) denoising diffusion probabilistic models 理论学习 本文价值 本文是 Diffusion 这一类模型的开山之作,首次证明 diffusion 模型能够生成高质量的图片,且奠定了所有后续模型的基本原理:加噪 --> 去噪。DDPM 模型的效果如下&#x…

驾驭高效编程:一探C++ STL的奥秘

1.什么是STL 2.:STL的版本 2.1:原始版本 2.2:P.J版本 2.3:RW版本 2.4:SGI版本 3:STL的六大组件 4:如何学习STL 5:STL的缺陷 1.什么是STL STL(standdard template library-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包含数据结构与算法软…

海康二次开发学习笔记9-通讯触发及模块列表获取

通讯触发及模块列表获取 模块列表获取 获取流程中所有模块的模块名,添加下拉框用于显示模块名 1. 处理Combox2的DropDown事件 /// <summary>/// 模块列表获取/// </summary>/// <param name"sender"></param>/// <param name"e&q…

OpenCV绘图函数(3)判断点一条直线是否在一个矩形范围内的函数clipLine()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 裁剪线段与图像矩形相交的部分。 cv::clipLine 函数计算出完全位于指定矩形内的线段部分。如果线段完全位于矩形之外&#xff0c;则返回 false。…

【Python报错】AttributeError`:`‘NoneType‘ object has no attribute ‘XXXX‘`

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言 在Python编程中&#xff0c;AttributeError是一个常见的错误类型&#xff0c;它表示尝试访问的对象没有该属性。本文将探讨…

Stable Diffusion绘画 | 插件-宽高比调整助手:让计算器毕业

在调整图片宽高时&#xff0c;如果每次都需要用计算器根据比例算好&#xff0c;再手工输入&#xff0c;非常影响效率。 推荐使用以下的插件&#xff0c;来实现高效准确地调整图片宽高比例。 Aspect Ratio Helper 安装地址&#xff1a;https://github.com/thomasasfk/sd-webui…

Spring 是什么

首先我们先看一个例子。以下是代码的结构。 public interface UserDAO {/*** 根据id删除用户*/void deleteById(); } public class UserDAOImplForMySQL implements UserDAO {Overridepublic void deleteById() {System.out.println("使用MySQL数据库删除信息....")…

DexclassLoader读取dex在Android14上遇到问题

报错如下&#xff1a; 在Android 14&#xff08;API 级别 34&#xff09;及以后版本中&#xff0c;DexClassLoader 被进一步限制&#xff0c;只能用于加载只读文件中的代码。这意味着你不能再使用 DexClassLoader 来加载从应用的内部存储空间中读取的文件。 我想通过JNI来修改…

新160个crackme - 043-riijj_cm_20041121

运行分析 除了主程序还有一个dll文件&#xff0c;应该是要加载pf1.dll这个动态链接库运行主程序&#xff0c;需破解Name和Serial&#xff0c;点击注册无反应 PE分析 C程序&#xff0c;32位&#xff0c;无壳 静态分析&动态调试 尝试ida动调加载动态链接库pf1.dll&#xff0c…