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

(5)框架搭建:Qt实战项目之主窗体菜单栏

        各位同学,今天我们开始Qt实战项目的菜单栏(Menu Bar)的构建。菜单栏是桌面应用中最基础的交互组件之一,Qt提供了完善的类来实现它,我们主要围绕QMenuBar、QMenu和QAction这三个核心类展开讲解。

核心类介绍

        在Qt中构建菜单栏,离不开以下三个类:
        1. QMenuBar
        菜单栏的容器,通常位于窗口顶部。一个主窗口(QMainWindow)默认会自带一个菜单栏,可通过menuBar()方法获取,无需手动创建。它的作用是管理多个QMenu(菜单)。
        2. QMenu
        菜单本身,比如“文件” “帮助”这些都是QMenu实例。它可以包含子菜单(嵌套QMenu)或QAction(菜单项)。
        3. QAction
        菜单项的“动作”,比如“文件”菜单下的“新建”“打开”“保存”。QAction不仅可以放在菜单中,还能关联到工具栏按钮、快捷键等,是Qt中“动作抽象”的核心类。

菜单实战

实战内容

        接着前面章节所创建的空白项目,为该项目添加菜单栏功能,具体规划如下:
1、菜单栏整体包含两个一级菜单,分别为 “文件” 和 “帮助”。
2、“文件” 菜单下需设置三个菜单项:

  • “新建项目”:用于触发新建项目的相关操作
  • “打开项目”:用于触发打开已有项目的相关操作
  • “退出”:用于关闭应用程序

3、“帮助” 菜单下需设置一个菜单项:

  • “关于”:用于展示应用程序的版本信息等内容

        温馨提示:本章实战核心是带大家熟悉菜单栏的基础构建流程,重点掌握 QMenuBar、QMenu、QAction 等核心类的使用与层级关联。由于信号与槽机制尚未讲解,各菜单项(如 “新建项目”“退出”“关于”)的具体功能逻辑本章仅做简单示意,对应的完整实现将在后续专门章节中详细拆解演示。

实战步骤

头文件引入

        首先在我们的主窗口类的头文件SubCfgTool.h中引入一下构建菜单栏所需要的三个类QMenuBar、QMenu、QAction。
        考虑到菜单栏包含的菜单及菜单项较多,为使代码结构更清晰、职责更单一,我们将单独定义一个createMenuBar()函数,集中编写菜单栏的所有构建逻辑(包括菜单创建、菜单项添加、快捷键设置等)。这样既便于后续维护,也能让主窗口的构造函数更简洁。

#pragma once#include <QtWidgets/QMainWindow>
//#include "ui_SubCfgTool.h"
#include <QMenuBar>
#include <QMenu>
#include <QAction>class SubCfgTool : public QMainWindow
{Q_OBJECTpublic:SubCfgTool(QWidget *parent = nullptr);~SubCfgTool();void createMenuBar();private:// Ui::SubCfgToolClass ui;
};

createMenuBar()的实现

        当首次调用menuBar()时,若主窗口尚未关联菜单栏,Qt 会自动创建一个新的QMenuBar并关联到主窗口。

// 菜单栏QMenuBar* menuBar = this->menuBar();

        然后定义两个菜单QMenu,分别是文件、帮助。
        我们可以参考一下官方文档的类库(All C++ Classes | Qt 6.9),在其中找到QMenuBar类并查看其公共方法。

        文档中明确QMenuBar提供了addMenu方法用于创建菜单,因此我们可以按如下方式实现:

// 菜单
QMenu* fileMenu = menuBar->addMenu("文件"); 
QMenu* helpMenu = menuBar->addMenu("帮助");

        温馨提示:Qt 官方类库文档是开发过程中的核心参考工具,能为各类组件的使用提供权威指导。后续开发中,建议大家主动结合官方文档,深入了解各类的属性、方法及使用场景,这会让开发过程更高效、更规范。

        接下来我们定义菜单项,并添加到相应的菜单中,可以通过addSeparator()添加分割线。

// 定义文件菜单中的菜单项
QAction *createProjAct = new QAction("新建项目"); 
QAction* openProjAct = new QAction("打开项目");
QAction* quitAct = new QAction("退出");
// 将菜单项加入到文件菜单
fileMenu->addAction(createProjAct); 
fileMenu->addAction(openProjAct);
fileMenu->addSeparator();
fileMenu->addAction(quitAct);// 定义帮助菜单中的菜单项
QAction* aboutAct = new QAction("关于");
// 将菜单加入到帮助菜单项
helpMenu->addAction(aboutAct);

编译运行测试效果

        在 Qt 开发中,当源码文件包含中文(如中文菜单名等)时,若编码格式设置不当,可能会导致编译报错(如语法错误)或运行时显示乱码。而Qt 对 UTF-8 编码有原生且完善的支持,且 UTF-8 是跨平台(Windows/Linux/macOS)的通用编码,能最大限度避免中文相关问题。所以编译之前我们先更改一下SubCfgTool.cpp的编码格式,可通过“高级保存选项”进行更改,步骤如下:

        温馨提示:如果找不到这个菜单,可以按照以下步骤操作:进入“工具”>“自定义”,选择“命令”选项卡,在“菜单栏”中选择“文件”,然后点击“添加命令”按钮。在弹出的窗口中,选择“文件”类别和“高级保存选项”命令,然后点击确定即可。 

        编译运行之前,记得在构造函数中调用createMenuBar()。不出意外的话,编译运行后你会在窗口顶部看到我们刚刚自定义的 “文件” 和 “帮助” 菜单。点击菜单展开看看,里面的 “新建项目”“打开项目”“退出” 和 “关于” 这些菜单项应该都能正常显示。

添加菜单项快捷键

        我们来尝试为菜单添加快捷键,这需要用到成员函数 setShortcut。
        首先来看 setShortcut 的参数,查阅官方文档中 QAction 类的 setShortcut 方法可知,其参数涉及 QKeySequence 类,通过该类我们能了解到快捷键的标准定义方式如下图所示,我们这里会用到Open和New两个标准的快捷键。

        将这两个快捷键分别绑定在我们的“新建项目”、“打开项目”菜单上:

// 添加快捷键
createProjAct->setShortcut(QKeySequence::New);
openProjAct->setShortcuts(QKeySequence::Open);

        下面绑定一个临时的响应函数来测试快捷键是否生效:

// 临时测试代码,按下新建项目,输出打印一行信息
connect(createProjAct, &QAction::triggered, []() {qDebug() << "Create New Project"; });

        编译运行程序,当我们按下快捷键Ctrl+N的时候,会输出Create New Project,但是我们发现如果按住鼠标不松开,会一直持续的打印,这个时候如果我们需要防止这种情况的话,可以设置菜单项的SetAutoRepeat为false。这个函数是控制键盘的组合快捷键是否重复执行。

createProjAct->setAutoRepeat(false);

添加菜单项图标

        如果觉得菜单有些单调,我们可以为菜单加上图标,让界面更直观生动。在 Qt 中,为菜单动作(QAction)添加图标主要通过 setIcon() 方法实现。QAction 提供了 setIcon(const QIcon &icon) 成员函数,用于为动作设置图标。
        准备好图标文件,在代码的工程目录下创建一个image目录,将图标文件放入其中。

        然后将图标文件加入 Qt 资源系统(.qrc),避免程序运行时依赖外部文件路径。在解决方案资源管理器中直接双击打开qrc文件,可以看到图标文件的管理界面。

        点击“Add >>Add Files”加入图标文件并保存,同时点击指定的图标也可以看到图标的Resource URL路径,如下:

使用资源路径就可以为菜单设置图标了,如下:

createProjAct->setIcon(QIcon(":/SubCfgTool/image/menu_new.png"));
openProjAct->setIcon(QIcon(":/SubCfgTool/image/menu_open.png"));

编译运行看看效果吧。

        本章节聚焦 Qt 菜单栏的构建核心,我们已熟练掌握菜单栏(QMenuBar)、菜单(QMenu)与动作(QAction)的层级关联,清晰理解了通过代码创建菜单结构、添加菜单项的完整流程。
        在后续学习中,我们将进一步拓展 Qt 界面框架的其他关键部分,重点探索工具栏(QToolBar)的搭建与使用逻辑,深入理解其与 QAction 的复用机制,最终实现菜单与工具栏的高效联动,让界面交互更具连贯性。

附录

SubCfgTool.h代码:

#include <QtWidgets/QMainWindow>
//#include "ui_SubCfgTool.h"
#include <QMenuBar>
#include <QMenu>
#include <QAction>class SubCfgTool : public QMainWindow
{Q_OBJECTpublic:SubCfgTool(QWidget *parent = nullptr);~SubCfgTool();void createMenuBar();private:// Ui::SubCfgToolClass ui;
};

SubCfgTool.cpp代码:

#include "SubCfgTool.h"SubCfgTool::SubCfgTool(QWidget *parent): QMainWindow(parent)
{// ui.setupUi(this);createMenuBar();
}SubCfgTool::~SubCfgTool()
{}void SubCfgTool::createMenuBar()
{// 菜单栏QMenuBar* menuBar = this->menuBar();// 菜单QMenu* fileMenu = menuBar->addMenu("文件");QMenu* helpMenu = menuBar->addMenu("帮助");// 定义文件菜单中的菜单项QAction* createProjAct = new QAction("新建项目");QAction* openProjAct = new QAction("打开项目");QAction* quitAct = new QAction("退出");// 将菜单项加入到文件菜单fileMenu->addAction(createProjAct);fileMenu->addAction(openProjAct);fileMenu->addSeparator();fileMenu->addAction(quitAct);// 定义帮助菜单中的菜单项QAction* aboutAct = new QAction("关于");// 将菜单加入到帮助菜单项helpMenu->addAction(aboutAct);// 添加快捷键createProjAct->setShortcut(QKeySequence::New);openProjAct->setShortcuts(QKeySequence::Open);createProjAct->setAutoRepeat(false);// 临时测试代码connect(createProjAct, &QAction::triggered, []() {qDebug() << "Create New Project"; });// 设置图标createProjAct->setIcon(QIcon(":/SubCfgTool/image/menu_new.png"));openProjAct->setIcon(QIcon(":/SubCfgTool/image/menu_open.png"));}


 

http://www.dtcms.com/a/601938.html

相关文章:

  • 网页C语言在线编译 | 快速、便捷的编程体验
  • 网站免费注册建站培训班
  • WebSpoon9.0(KETTLE的WEB版本)编译 + tomcatdocker部署 + 远程调试教程
  • 万网的网站建设好吗北京模板网站建站
  • Leaflet入门,Leaflet如何修复瓦片之间有白线问题
  • Unity一分钟思路---UI任务条:宝箱位置如何准确卡在百分比位置上
  • 在线做爰a视频网站个人网站搭建详细步骤
  • 网站开发 工作量云台山旅游景区网站建设内容
  • Android 使用MediaMuxer+MediaCodec编码MP4视频异步方案
  • 第14章 智能指针
  • GSV6128E/ACP---嵌入式Display port 1.4到 LVDS转换器,带音频提取和嵌入式MCU
  • 网站建设ftp上传是空目录仿做网站的网站
  • c 网站开发代码辅助色网站
  • 无法下载依赖:pentaho-aggdesigner-algorithm/5.1.5-jhyde
  • sward实战教程系列(1) - 安装与配置
  • C语言编译环境 | 配置和优化你的开发环境,让编程更加高效
  • 《Vue项目开发实战》第五章:组件封装--Form
  • 数据管理战略|流程与IT变革、量化闭环
  • 外卖网站制作wordpress主题 制作教程
  • 企业网站总承包建设模式关键步骤wordpress安装主题后打不开
  • 在纷扰世界里找到自己的安心之道——《安心之道》的实践指南
  • 网站建设的公司太多了东莞南城房价
  • 【python】使用opencv的模板匹配进行自动化点击
  • leetcode 2654 使数组所有元素变成1的最少操作次数
  • 数据结构(长期更新)第8讲:队列
  • LKT4305安全芯片身份认证介绍
  • 看门狗超时时间的理解
  • C语言编译器手机教程 | 轻松在手机上编写和编译C语言程序
  • 基于SpringBoot的企业资产管理系统开发与设计
  • 黄骅做网站价格莱芜金点子招工小时工