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


  • 博客主页:Duck Bro 博客主页
  • 系列专栏:Qt 专栏
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍

Qt窗口 | 菜单栏 | QMenuBar的使用及说明

文章编号:Qt 学习笔记 / 47


一、菜单栏

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

在这里插入图片描述

  • 18
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Qt中,您可以通过使用QMenuBar组件来创建菜单栏,并且可以通过设置QAction对象的快捷键属性来实现菜单栏的跳转功能。具体步骤如下: 1. 创建一个QMenuBar对象,并将其添加到您的主窗口中。 2. 在QMenuBar中添加QMenu对象,每个QMenu对象代表一个菜单项。 3. 在每个QMenu中添加QAction对象,每个QAction对象代表一个菜单栏选项。 4. 为每个QAction对象设置快捷键属性,以便用户可以通过按下快捷键来快速跳转到相应的菜单项。 下面是一个简单的示例代码,用于实现一个带有三个菜单项的菜单栏,并且可以通过按下Alt+1、Alt+2、Alt+3来快速跳转到相应的菜单项: ```cpp QMenuBar *menuBar = new QMenuBar(this); QMenu *menu1 = new QMenu("菜单1", menuBar); QMenu *menu2 = new QMenu("菜单2", menuBar); QMenu *menu3 = new QMenu("菜单3", menuBar); menuBar->addMenu(menu1); menuBar->addMenu(menu2); menuBar->addMenu(menu3); QAction *action1 = new QAction("选项1", this); QAction *action2 = new QAction("选项2", this); QAction *action3 = new QAction("选项3", this); menu1->addAction(action1); menu2->addAction(action2); menu3->addAction(action3); action1->setShortcut(QKeySequence(Qt::AltModifier + Qt::Key_1)); action2->setShortcut(QKeySequence(Qt::AltModifier + Qt::Key_2)); action3->setShortcut(QKeySequence(Qt::AltModifier + Qt::Key_3)); connect(action1, SIGNAL(triggered()), this, SLOT(onAction1Triggered())); connect(action2, SIGNAL(triggered()), this, SLOT(onAction2Triggered())); connect(action3, SIGNAL(triggered()), this, SLOT(onAction3Triggered())); ``` 在这个示例中,我们首先创建了一个QMenuBar对象,并将其添加到主窗口中。接着,我们创建了三个QMenu对象,并将其添加到QMenuBar中。然后,我们分别在每个QMenu中添加了一个QAction对象,表示菜单项。最后,我们为每个QAction对象设置了快捷键属性,并且将其与自定义的槽函数连接起来,以便在用户按下快捷键时执行相应的操作。 您可以根据需要修改这个示例代码,以便实现您所需要的菜单栏跳转功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Duck Bro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值