VS+QT开发之添加Action(菜单栏动作)

本文详细指导VS2022中使用QT开发菜单栏,实现不同选项触发不同界面展示,并演示如何添加动作、设置槽连接和编写针对COM/NET切换的隐藏/显示功能。

VS+QT开发之添加Action(菜单栏动作)

简介

本文章讲解如何在VS2022中开发QT界面的菜单栏。通过选中菜单栏显示不同的界面。
先上界面!!!
图一:启动时界面
在这里插入图片描述
图二:菜单栏选项
在这里插入图片描述
图三:选中COM后界面
在这里插入图片描述
图四:再次选中NET选项
在这里插入图片描述

如何快速添加动作

打开UI文件,在图示位置输入菜单栏名称后回车,进入下一级的输入。
在这里插入图片描述
分别输入菜单栏中的功能名称。此时在对象检查器中自动添加了相对应的动作对象。
在这里插入图片描述

为动作添加槽连接(响应相应的动作函数)

找到信号/槽 编辑器,点击"+"号。发送者选择动作产生的对象(actionCOM/actionNET)。信号选择tiggered()(PS:QT中点击动作会触发tiggered信号)。接收者选择要将信号发送到哪个类里。这里是主界面所在的类(QtWidgetsApplication1Class)。槽信号选择相对应的槽信号(PS:一般是新创建一个槽函数)。
创建槽函数可以参考这篇文章:https://blog.youkuaiyun.com/MelyLenient/article/details/123907803
(根据文章创建槽函数后,在第④步不选择确定就可以在动作编辑里找到新添加的槽函数了)
在这里插入图片描述

编写槽函数

两个不同的动作点击时,有不同的相应,在本文章中,涉及对插件的隐藏和显示操作。
代码如下:
h文件

#pragma once

#
<think>我们正在讨论如何向Qt菜单栏添加Action。根据引用[2]中的信息,我们可以通过创建QAction对象并将其添加到菜单中来实现。以下是详细步骤: ### 方法1:使用Qt Designer(可视化添加) 1. **打开UI文件** 在Qt Designer中打开你的`.ui`文件。 2. **选择菜单栏** 在窗口顶部菜单栏中双击目标菜单(如“文件”),进入编辑状态。 3. **添加菜单项** - 在菜单底部输入框内输入菜单项文本(如“新建”),按Enter确认。 - 此时会自动生成对应的QAction对象,并出现在右侧的Action编辑器中。 4. **设置属性(可选)** - 在Action编辑器中选中新添加Action。 - 在属性编辑器设置图标、快捷键等属性。 5. **保存并编译** 保存UI文件,重新编译项目使改动生效。 ### 方法2:通过代码动态添加(C++示例) 引用[2]中展示了使用C++代码添加菜单项的方法: ```cpp // 获取主窗口的菜单栏 QMenuBar *menuBar = this->menuBar(); // 创建菜单(如"文件"菜单) QMenu *fileMenu = menuBar->addMenu("文件(&F)"); // 创建QAction对象 QAction *newAction = new QAction("新建(&N)", this); QAction *openAction = new QAction("打开(&O)", this); QAction *saveAction = new QAction("保存(&S)", this); // 可选:设置快捷键 newAction->setShortcut(QKeySequence::New); openAction->setShortcut(QKeySequence::Open); saveAction->setShortcut(QKeySequence::Save); // 可选:设置图标 newAction->setIcon(QIcon(":/icons/new.png")); openAction->setIcon(QIcon(":/icons/open.png")); saveAction->setIcon(QIcon(":/icons/save.png")); // 将Action添加到菜单 fileMenu->addAction(newAction); fileMenu->addAction(openAction); fileMenu->addSeparator(); // 添加分割线 fileMenu->addAction(saveAction); // 连接信号槽(处理点击事件) connect(newAction, &QAction::triggered, this, &MainWindow::newFile); connect(openAction, &QAction::triggered, this, &MainWindow::openFile); connect(saveAction, &QAction::triggered, this, &MainWindow::saveFile); ``` ### 关键说明 1. **内存管理**: 通过`new`创建的QAction对象,需确保其父对象正确设置(如`this`指向主窗口),以便Qt自动回收内存[^2]。 2. **多平台快捷键**: 使用`QKeySequence::StandardKey`(如`QKeySequence::Save`)可自动适配不同平台的快捷键习惯。 3. **信号连接**: 必须将Action的`triggered()`信号连接到具体槽函数,否则点击菜单项不会有响应。 4. **资源文件**: 若使用图标,需提前将图标文件添加Qt资源系统(`.qrc`文件)。 ### 相关问题 1. 如何为菜单项添加子菜单? 2. 如何实现菜单项的启用/禁用状态切换? 3. Qt Designer中如何设置Action的快捷键? 4. 如何实现动态菜单(根据运行时数据生成菜单项)? 5. 如何解决菜单项图标显示异常的问题? [^1]: QT添加菜单栏-工具栏-中心区域-状态栏-dock示范. 优快云下载. [^2]: QT窗口-菜单栏创建及内存管理. 技术博客.</think>### 在Qt中向菜单栏添加Action的完整指南 #### 方法1:使用Qt Designer可视化添加(推荐) 1. **打开UI文件** - 在Qt Designer中打开`.ui`文件 - 双击顶部菜单栏的"在此输入"占位符,输入菜单名称(如"文件") 2. **添加菜单项** ```plaintext 文件菜单 → 右键 → 添加分隔符 → 在此输入 → 输入菜单项名称(如"新建") ``` - 系统会自动创建对应的`QAction`对象 - 在右侧**Action编辑器**中可见新生成的`actionNew`等对象[^2] 3. **设置Action属性** - 在Action编辑器中选中目标Action - 在属性面板设置: - 快捷键:`shortcut`属性 - 图标:`icon`属性 - 提示文本:`toolTip`属性 - 状态栏提示:`statusTip`属性 4. **添加分割线** - 在菜单编辑界面右键 → 选择"添加分隔符" - 或通过代码添加:`menu->addSeparator()`[^2] #### 方法2:通过代码动态添加(C++示例) ```cpp // 获取主窗口菜单栏 QMenuBar *menuBar = this->menuBar(); // 创建文件菜单 QMenu *fileMenu = menuBar->addMenu("文件(&F)"); // 创建Action对象(注意内存管理) QAction *newAction = new QAction("新建(&N)", this); QAction *openAction = new QAction("打开(&O)", this); // 设置属性 newAction->setShortcut(QKeySequence::New); // 标准快捷键 newAction->setIcon(QIcon(":/icons/new.png")); newAction->setStatusTip("创建新文件"); // 添加到菜单 fileMenu->addAction(newAction); fileMenu->addAction(openAction); fileMenu->addSeparator(); // 添加分割线 // 连接信号槽(处理点击事件) connect(newAction, &QAction::triggered, this, &MainWindow::newFile); ``` #### 关键注意事项 1. **内存管理**: - 动态创建的`QAction`必须指定父对象(如`this`) - 否则会导致内存泄漏[^2] ```cpp // 正确方式(自动回收内存) QAction *exitAction = new QAction("退出", this); // 错误方式(内存泄漏风险) QAction *exitAction = new QAction("退出"); ``` 2. **多平台适配**: - 使用`&`符号定义助记键(如"文件(&F)") - 使用`QKeySequence::StandardKey`确保跨平台快捷键一致性 ```cpp // Windows: Ctrl+S, macOS: Cmd+S saveAction->setShortcut(QKeySequence::Save); ``` 3. **共享Action**: - 同一个Action可同时添加菜单栏和工具栏 ```cpp // 创建工具栏 QToolBar *toolBar = addToolBar("主工具栏"); toolBar->addAction(newAction); // 复用菜单的Action ``` #### 验证步骤 1. 编译运行后检查菜单项显示 2. 测试快捷键是否生效 3. 检查状态栏提示是否显示 4. 验证点击菜单项是否触发槽函数 ### 相关问题 1. 如何为菜单项添加自定义图标? 2. Qt中如何处理菜单项的启用/禁用状态? 3. 如何实现动态生成的菜单项(如最近打开文件列表)? 4. 多语言应用中如何实现菜单项的实时翻译? 5. 如何创建多层嵌套的子菜单? [^1]: QT添加菜单栏-工具栏-状态栏示范. 优快云下载资源 [^2]: Qt窗口菜单栏创建及内存管理. C++技术博客
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值