qt-C++笔记之addAction和addMenu的区别以及QAction的使用场景
qt-C++笔记之addAction和addMenu的区别以及QAction的使用场景
code review!
文章目录
- qt-C++笔记之addAction和addMenu的区别以及QAction的使用场景
- 1.QMenu和QMenuBar的关系与区别
- 2.addMenu和addAction的使用场景区别
- 3.将QAction的信号连接到槽函数
- 4.QAction的使用场景
- 5.将例1修改为不使用QMainWindow,使用QWidget
- 6.QMenuBar *menuBar = new QMenuBar(&window); 详解
1.QMenu和QMenuBar的关系与区别
QMenu
和QMenuBar
是Qt中用于创建菜单的两个类,它们之间存在关系和区别。
-
关系:
QMenuBar
是顶层窗口的菜单栏,通常位于窗口的顶部,负责承载和管理菜单。QMenu
是菜单栏中的一个菜单项,可以包含子菜单、动作等。
通常情况下,你会创建一个
QMenuBar
对象作为主窗口的菜单栏,然后使用addMenu
方法添加多个QMenu
对象作为菜单栏的菜单项。 -
区别:
QMenuBar
是一个顶级窗口部件,用于承载和管理菜单。它通常只有一个,并且位于主窗口的顶部。QMenu
是一个弹出菜单或子菜单,它可以包含多个菜单项(QAction
),以及子菜单(另一个QMenu
)。
总的来说,
QMenuBar
是用于创建和管理菜单栏的部件,而QMenu
是用于创建和管理菜单的部件。QMenuBar
通常只有一个,用于承载多个QMenu
对象,而每个QMenu
对象可以包含多个菜单项和子菜单。
以下是一个简单的示例代码,演示了如何创建QMenuBar
和QMenu
:
例1
代码
#include <QApplication>
#include <QMainWindow>
#include <QMenuBar>
#include <QMenu>
#include <QAction>int main(int argc, char *argv[]) {QApplication app(argc, argv);QMainWindow mainWindow;QMenuBar *menuBar = mainWindow.menuBar();QMenu *fileMenu = menuBar->addMenu("File");QAction *newAction = fileMenu->addAction("New");QAction *openAction = fileMenu->addAction("Open");QMenu *editMenu = menuBar->addMenu("Edit");QAction *cutAction = editMenu->addAction("Cut");QAction *copyAction = editMenu->addAction("Copy");mainWindow.show();return app.exec();
}
上述示例中,首先创建了一个QMenuBar
对象,然后使用addMenu
方法在菜单栏中添加了两个QMenu
对象:File
和Edit
。每个QMenu
对象又通过addAction
方法添加了相应的动作(菜单项)。
总结:QMenuBar
是用于创建和管理菜单栏的顶级窗口部件,而QMenu
是用于创建和管理菜单的部件。QMenuBar
可以包含多个QMenu
对象作为菜单项,而每个QMenu
对象可以包含多个菜单项和子菜单。
2.addMenu和addAction的使用场景区别
addMenu
和addAction
是用于在菜单(QMenu
)中添加菜单项(QAction
)的函数,它们有不同的使用场景和区别。
-
addMenu
的使用场景:- 当你想要在菜单中添加一个子菜单时,使用
addMenu
是合适的。通过addMenu
方法,你可以在当前菜单中创建一个新的子菜单,并返回该子菜单的指针,以便进一步添加菜单项或子菜单。例如:QMenu *fileMenu = menuBar->addMenu("File"); QMenu *editMenu = menuBar->addMenu("Edit");
- 通常情况下,你会使用
addMenu
在菜单栏(QMenuBar
)或其他菜单(QMenu
)中添加子菜单。
- 当你想要在菜单中添加一个子菜单时,使用
-
addAction
的使用场景:- 当你想要在菜单中添加一个动作(菜单项)时,使用
addAction
是合适的。通过addAction
方法,你可以在当前菜单中添加一个动作,并返回该动作的指针,以便进一步设置动作的属性和信号槽。例如:QAction *newAction = fileMenu->addAction("New"); QAction *openAction = fileMenu->addAction("Open");
- 通常情况下,你会使用
addAction
在菜单或子菜单中添加动作,以便用户可以执行相应的操作。
- 当你想要在菜单中添加一个动作(菜单项)时,使用
总结:
addMenu
适用于在菜单中添加子菜单。addAction
适用于在菜单中添加动作(菜单项)。
根据你的需求和菜单结构,选择合适的函数以在菜单中添加菜单项或子菜单。
3.将QAction的信号连接到槽函数
要将QAction
的信号连接到槽函数,你需要使用QObject::connect
函数。以下是一个示例代码,展示了如何连接QAction
的triggered
信号到槽函数:
// 假设你有一个名为 action 的 QAction 对象和一个名为 receiver 的接收者对象// 定义槽函数
void MyReceiver::handleAction()
{// 处理 QAction 的触发事件// ...
}// 在连接信号和槽之前,确保接收者对象 receiver 已经存在// 连接信号和槽
QObject::connect(action, &QAction::triggered, receiver, &MyReceiver::handleAction);
在上面的代码中,MyReceiver
是接收者类,其中定义了一个名为handleAction
的槽函数。action
是要连接的QAction
对象,receiver
是接收者对象的实例。
QObject::connect
函数的第一个参数是发送信号的对象,第二个参数是信号的名称,第三个参数是接收者对象,第四个参数是槽函数的名称。你可以使用&ClassName::slotName
语法来指定槽函数。
当action
的triggered
信号被触发时,与之连接的槽函数handleAction
将被调用。你可以在槽函数中执行你想要的操作。
请确保在连接信号和槽之前,接收者对象receiver
已经被正确创建和初始化。
代码
#include <QApplication>
#include <QMainWindow>
#include <QAction>
#include <QObject>
#include <QDebug>
#include <QMenu>
#include <QMenuBar>// 定义接收者类
class MyReceiver : public QObject
{
public slots:void handleAction(){qDebug() << "Action triggered!";}
};int main(int argc, char *argv[])
{QApplication app(argc, argv);// 创建 QMainWindowQMainWindow mainWindow;// 创建 QActionQAction *action = new QAction("My Action", &mainWindow);// 创建接收者对象MyReceiver receiver;// 连接信号和槽QObject::connect(action, &QAction::triggered, &receiver, &MyReceiver::handleAction);// 将 QAction 添加到 QMainWindow 的菜单栏QMenu *menu = mainWindow.menuBar()->addMenu("File");menu->addAction(action);// 显示 QMainWindowmainWindow.show();return app.exec();
}
4.QAction的使用场景
QAction
不仅仅适用于菜单中的动作(菜单项),它还可用于其他用户界面元素和交互方式中。
虽然在菜单中添加动作是QAction
的常见用法之一,但它也可以用于以下情况:
-
工具栏:
QAction
可以用于在工具栏上添加按钮和其他交互元素。你可以将QAction
对象添加到QToolBar
中,从而在工具栏上创建可点击的按钮。 -
快捷键:
QAction
可以与快捷键关联,使用户能够通过键盘快捷方式触发操作。通过setShortcut
函数,你可以为QAction
指定一个键盘组合,例如Ctrl+C或F5。 -
上下文菜单:
QAction
可以与上下文菜单(右键菜单)关联。你可以将QAction
添加到QMenu
中,并在用户右键单击相关界面元素时显示上下文菜单。 -
工具提示和状态栏:
QAction
可以通过设置工具提示和状态栏消息来提供有关操作的附加信息。用户将鼠标悬停在具有关联QAction
的界面元素上时,工具提示将显示相应的文本。状态栏消息将在用户执行操作时显示在状态栏上。
总之,QAction
是一个通用的用户交互元素,用于表示用户界面中的操作。它可以用于菜单、工具栏、快捷键、上下文菜单和其他需要与用户交互的地方。
5.将例1修改为不使用QMainWindow,使用QWidget
代码
#include <QApplication>
#include <QWidget>
#include <QMenuBar>
#include <QMenu>
#include <QAction>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QMenuBar *menuBar = new QMenuBar(&window);QMenu *fileMenu = menuBar->addMenu("File");QAction *newAction = fileMenu->addAction("New");QAction *openAction = fileMenu->addAction("Open");QMenu *editMenu = menuBar->addMenu("Edit");QAction *cutAction = editMenu->addAction("Cut");QAction *copyAction = editMenu->addAction("Copy");window.show();return app.exec();
}
6.QMenuBar *menuBar = new QMenuBar(&window); 详解
QMenuBar *menuBar = new QMenuBar(&window);
这行代码的详细解释如下:
-
QMenuBar
是 Qt 框架中的一个类,用于创建和管理菜单栏(Menu Bar)。 -
&window
是一个指向QWidget
对象的指针,表示菜单栏的父对象。在这种情况下,我们将菜单栏设置为窗口的子对象,以便在窗口关闭时自动释放菜单栏内存。 -
new QMenuBar(&window)
使用new
运算符进行动态内存分配,创建了一个QMenuBar
对象。通过传递&window
作为参数,我们将窗口设置为菜单栏的父对象。 -
QMenuBar *menuBar
是一个变量声明,它指定了变量的类型为QMenuBar*
即菜单栏的指针类型。 -
=
是赋值操作符,用于将new QMenuBar(&window)
的返回值赋给menuBar
变量。这样,menuBar
变量就指向了动态分配的菜单栏对象。
通过使用动态内存分配和指定父对象,我们可以确保在窗口关闭时,菜单栏对象会自动被销毁并释放内存。
总之, QMenuBar *menuBar = new QMenuBar(&window);
这行代码的作用是创建一个 QMenuBar
对象,并将其设置为窗口的菜单栏,并将菜单栏的指针存储在 menuBar
变量中,以便后续对菜单栏进行操作。
相关文章:

qt-C++笔记之addAction和addMenu的区别以及QAction的使用场景
qt-C笔记之addAction和addMenu的区别以及QAction的使用场景 code review! 文章目录 qt-C笔记之addAction和addMenu的区别以及QAction的使用场景1.QMenu和QMenuBar的关系与区别2.addMenu和addAction的使用场景区别3.将QAction的信号连接到槽函数4.QAction的使用场景5.将例1修改…...

nodejs 管道通讯
概述 2个nodejs程序的一种通讯方式,管道通讯,跟其他语言一样,管道通讯是一种特殊的socket通讯,普通的socket通讯是通过监听端口触发通讯机制,管道通讯是通过监听文件的方式进行通讯,一般用于单机的多进程通…...

k8s常用命令及示例(三):apply 、edit、delete
k8s常用命令及示例(三):apply 、edit、delete 1. kubectl apply -f 命令:从yaml文件中创建资源对象。 -f 参数为强制执行。kubectl apply和kubectl create的区别如下:kubectl create 和 kubectl apply 是 Kubernetes 中两个常用的命令&…...

前端页面显示的时间格式为:2022-03-18T01:46:08.000+00:00 如何转换为:年-月-日,并根据当前时间判断为几天前
由于后端每条博文的发表时间是以“xxxx—xx—xxxx:xx:xx”的形式显示的, 现在要在前端改成“xxxx年xx月xx日”的形式。 并对10分钟内发表的显示“刚刚”,对24小时内发表的显示“小时前”。 超过24小时,小于48小时,显示“1天前”。…...

UniGui使用CSS移动端按钮标题垂直
unigui移动端中按钮拉窄以后,标题无法垂直居中,是因为标题有一个padding属性,在四周撑开一段距离。会变成这样: 解决方法,用css修改padding,具体做法如下 首先给button的cls创建一个cls,例如 然后添加css&…...

0-50KHz频率响应模拟量高速信号隔离变送器
0-50KHz频率响应模拟量高速信号隔离变送器 型号:JSD TA-2322F系列 高速响应时间,频率响应时间快 特点: ◆小体积,低成本,标准 DIN35mm 导轨安装方式 ◆六端隔离(输入、输出、工作电源和通道间相互隔离) ◆高速信号采集 (-3dB,Min≤ 3.5 uS,订…...

Linux系统下CPU性能问题分析案例
(上) 本文涉及案例来自于学习极客时间专栏《Linux性能优化实战》精心整理而来,案例总结不到位的请各位多多指正。 某个应用的CPU使用率居然达到100%,我该怎么办? 分析过程 使用观察系统CPU使用情况(并按下…...

【网络协议】LACP(Link Aggregation Control Protocol,链路聚合控制协议)
文章目录 LACP名词解释LACP工作原理互发LACPDU报文确定主动端确定活动链路链路切换 LACP和PAgP有什么区别?LACP与LAG的关系LACP模式更优于手动模式LACP模式对数据传输更加稳定和可靠LACP模式对聚合链路组的故障检测更加准确和有效 推荐阅读 LACP名词解释 LACP&…...
MATLAB 2018一本通 学习笔记一
vivado暂时可以收一下,而且今天看场景和问题的解决程度,这两天看的还是有效果,需要接下来弄一下matlab。 算法开发、数据可视化、数据分析、数值计算方面,之前搞Python弄过matlib库,觉得差不多,但是实际工…...
文献计量学方法与应用、主题确定、检索与数据采集、VOSviewer可视化绘图、Citespace可视化绘图、R语言文献计量学绘图分析
目录 一、文献计量学方法与应用简介 二、主题确定、检索与数据采集 三、VOSviewer可视化绘图 四、Citespace可视化绘图 五、R语言文献计量学绘图分析 六、论文写作 七、论文投稿 更多应用 文献计量学是指用数学和统计学的方法,定量地分析一切知识载体的交叉…...
C#生成微信支付的Authorization签名认证
//获取签名var Token BuildAuthAsync("GET", body, URL);/// <summary>/// 构造签名串/// </summary>/// <param name"method">HTTP请求方式(全大写)</param>/// <param name"body">API接口…...

平台工程与 DevOps 和 SRE 有何不同?
在现代软件开发和运营的动态领域中 ,平台工程、DevOps 和站点可靠性工程 (SRE) 等术语 经常使用,有时可以互换使用,这常常会导致进入或浏览这些领域的专业人员感到困惑。了解这些概念之间的细微差别对于努力构建强大且可扩展的系统的组织至关…...
算法-只出现一次的数字集合
前言 仅记录学习笔记,如有错误欢迎指正。 题目 记录一道面试过的题目 题目如下: 给定一个数组,内容为1-n的数字,其中每个数字只会出现一次或者多次,请在时间复杂度O(n),空间复杂度O(1)的条件下找出所有出现一次的数…...

Linux,Web网站服务(一)
1.准备工作 为了避免发生端口冲突,程序冲突等现象,建议卸载使用RPM方式安装的httpd [rootnode01 ~]# rpm -e http --nodeps 挂载光盘到/mnt目录 [rootnode01 ~]# mount /dev/cdrom /mnt Apache的配置及运行需要apr.pcre等软件包的支持,因此…...

Monkey工具之fastbot-iOS实践
背景 目前移动端App上线后 crash 率比较高, 尤其在iOS端。我们需要一款Monkey工具测试App的稳定性,更早的发现crash问题并修复。 去年移动开发者大会上有参加 fastbot 的分享,所以很自然的就想到Fastbot工具。 Fastbot-iOS安装配置 准备工…...
我想当个程序员
1、为什么当初选择计算机行业 能从事这个行业,也和当时经济情况有关系。 初中开始感兴趣,大学软件工程专业。大四报的android的培训,后来进的对日外包,没想到签合同当天被辞,非技术原因,性格导致。后来回家…...

ACM32如何保护算法、协议不被破解或者修改
ACM32具有以下几种功能,可以保护算法、协议不被破解或者修改。 1.存储保护 RDP读保护 WRP写保护 PCROP 专有代码读保护 MPU存储区域权限控制 Secure User Memory存储区域加密 2.密码学算法引擎 AES HASH 随机数生成 …...
Android Studio(Flutter)常用快捷键
快捷键说明Ctrl Alt M抽取方法Ctrl Alt W抽取组件Alt Enter包裹组件Shift F6重命名Ctrl Alt L代码格式化Ctrl Alt O删除无用importCtrl X删除光标所在行Ctrl D复制一行代码Ctrl C复制Ctrl V粘贴Ctrl Z撤销Ctrl /注释一行代码Ctrl Shift /注释一段代码Ctrl S…...

CSS特效030:日蚀动画
CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧,主要包含CSS布局,CSS特效,CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点,CSS特效主要是一些动画示例,CSS花边是描述了一些CSS…...
746.使用最小花费爬楼梯
给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯顶部的最低花费。 示例 1…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...