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

【Qt | QAction】Qt 的 QAction 类介绍

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍 🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭
⏰发布时间⏰:

本文未经允许,不得转发!!!

目录

  • 🎄一、概述
  • 🎄二、QAction 构造方法和属性方法
    • ✨2.1 构造方法
    • ✨2.2 属性方法
  • 🎄三、信号(Signals)、槽(Slots)
    • ✨3.1 信号(Signals)
    • ✨3.2 槽(Slots)
  • 🎄四、总结


在这里插入图片描述
在这里插入图片描述

🎄一、概述

QAction类提供了一个抽象的用户界面操作,可以插入到小部件(widgets)中。

在应用程序中,可以通过菜单(menus)、工具栏按钮(toolbar buttons)和键盘快捷键(keyboard shortcuts)调用许多常用命令。由于用户希望以相同的方式执行每个命令,而不管使用的用户界面是什么,因此将每个命令表示为动作(action)是有用的。

动作(Action)可以添加到菜单和工具栏,并将自动保持同步。例如,在文字处理程序中,如果用户按下“粗体”工具栏按钮,将自动选中“粗体”菜单项。

动作(Action)可以作为独立对象创建,但也可以在菜单构建过程中创建;QMenu类包含方便的函数,用于创建适合作为菜单项使用的操作。

QAction可能包含一个图标、菜单文本、快捷方式、状态文本、“What’s This?”文本和一个工具提示。其中大多数可以在构造函数中设置。它们也可以通过setIcon()、setText()、setIconText()、setShortcut()、setStatusTip()、setWhatsThis()和setToolTip()独立设置。对于菜单项,可以使用setFont()设置单独的字体。

使用QWidget::addAction()QGraphicsWidget::addAction()将动作添加到小部件(widgets)中。注意,在使用小部件(widget)之前,必须向其添加操作;用作快捷方式时(即Qt::ApplicationShortcutQt::ShortcutContext)也应该这样做,并且快捷方式应该是全局的。

创建QAction后,应该将其添加到相关菜单和工具栏中,然后连接到执行该操作的槽。例如:

const QIcon openIcon = QIcon::fromTheme("document-open", QIcon(":/images/open.png"));
QAction *openAct = new QAction(openIcon, tr("&Open..."), this);
openAct->setShortcuts(QKeySequence::Open);
openAct->setStatusTip(tr("Open an existing file"));
connect(openAct, &QAction::triggered, this, &MainWindow::open);
fileMenu->addAction(openAct);
fileToolBar->addAction(openAct);

我们建议将操作创建为使用它们的窗口的子窗口。在大多数情况下,操作(Action)将是应用程序主窗口(main window)的子窗口。


在这里插入图片描述

🎄二、QAction 构造方法和属性方法

✨2.1 构造方法

QAction(QObject *parent = nullptr);
QAction(const QString &text, QObject *parent = nullptr);
QAction(const QIcon &icon, const QString &text, QObject *parent = nullptr);

✨2.2 属性方法

文本和图标:

QString text() const
获取动作的文本标签。void setText(const QString &text)
设置动作的文本标签。QIcon icon() const
获取动作的图标。void setIcon(const QIcon &icon)
设置动作的图标。QString iconText() const
获取动作的图标文本void setIconText(const QString &text)
设置动作的图标文本

状态:

bool isCheckable() const
返回动作是否可选中void setCheckable(bool)
设置动作可否选中bool isChecked() const
返回动作是否被选中(适用于复选框)。void setChecked(bool checked)
设置动作的选中状态。bool isEnabled() const
返回动作是否可用。void setEnabled(bool enabled)
启用或禁用该动作。

快捷键:

QString shortcut() const
获取动作的快捷键。void setShortcut(const QKeySequence &shortcut)
设置动作的快捷键。void setShortcutContext(Qt::ShortcutContext context)void setShortcutVisibleInContextMenu(bool show)void setShortcuts(const QList<QKeySequence> &shortcuts)void setShortcuts(QKeySequence::StandardKey key)QKeySequence shortcut() constQt::ShortcutContext shortcutContext() constQList<QKeySequence> shortcuts() const

在这里插入图片描述

🎄三、信号(Signals)、槽(Slots)

✨3.1 信号(Signals)

  • void changed()
    

    该信号在动作发生变化时发出。如果您只对给定小部件中的操作感兴趣,您可以监视QWidget::actionEvent()发送的QEvent::ActionChanged
    注意:
    autoRepeat属性的通知信号。
    checkable属性的通知信号。
    enabled属性的通知信号。
    font属性的通知信号。
    icon属性的通知信号。
    iconText属性的通知信号。
    iconVisibleInMenu属性的通知信号。
    menuRole属性的通知信号。
    shortcut属性的通知信号。
    shortcutContext属性的通知器信号。
    shortcutVisibleInContextMenu属性的通知信号。
    statusTip属性的通知信号。
    text属性的通知信号。
    toolTip属性的通知信号。
    visable属性的通知信号。
    whatsThis属性的通知信号。

  • void hovered()
    

    当用户突出显示(highlighted)某个动作时,就会发出这个信号;例如,当用户将光标停在菜单选项、工具栏按钮或按下操作的快捷键组合时。

  • void toggled(bool checked)
    

    当一个使能了可选(checkable)的动作改变了它的isChecked()状态时,就会发出这个信号。这可能是用户交互的结果,也可能是因为调用了setChecked()。当setChecked()更改QAction时,除了toggle()之外,它还会发出changed()。

    如果Action被选中,则参数checked为true,如果Action未被选中,则参数checked为false。

    注意:checked属性的通知信号。

  • void triggered(bool checked = false)
    

    当一个动作被用户激活时,就会发出这个信号;例如,当用户单击菜单选项、工具栏按钮或按下操作的快捷键组合时,或者调用trigger()时。值得注意的是,当setChecked()或toggle()被调用时,它不会被触发。

    如果Action是可选的(checkable),则参数checked为true表示Action被选中,参数checked为false表示Action未被选中。


✨3.2 槽(Slots)

void hover()
这是一个很方便的槽,使action活跃(activate(Hover))void setChecked(bool)
设置动作的选中状态。void setDisabled(bool b)
设置动作未使能。void setEnabled(bool)
设置动作使能。void setVisible(bool)
设置动作可见void toggle()
这是一个用于checked属性的方便函数。连接到它以将 checked 的状态更改为相反的状态。void trigger()
触发动作,使action活跃(activate(trigger))

在这里插入图片描述

🎄四、总结

👉本文介绍了Qt的 QActioin 类,详细介绍了该类重要的信号、槽函数。

常用的方法总结

  1. QAction::QAction( const QString & text, QObject * parent )
    QAction类的构造函数之一,利用text,parent创建QAction对象。QAction对象一般为菜单中的菜单项,比如 “文件"菜单中"新建"选项就是一个QAction对象,上述构造函数中text成员变量即为菜单项所表示的内容。
    用法:QAction *newAction = new QAction(tr(”&New"),this);
  2. void QAction::setIcon ( const QIcon& icon )
    该函数可设置菜单项名称前的图标
    用法:newAction->setIcon(QIcon(“:/images/new.png”));
  3. void QAction::setShortcut ( const QKeySequence & shortcut );
    设置QAction对象执行的快捷键
    用法:newAction->setShortcut(tr(“Ctrl+N”));
  4. void QAction::setStatusTip ( const QString & statusTip );
    设置当鼠标移动到“动作”上时,状态栏显示的提示语。
  5. void QAction::setVisible ( bool );
    设置“动作”显示与否,当形参为true是,“动作”表示。
  6. void QAction::triggered ( bool checked = false ) [signal]
    此函数为信号,当用户触发此“动作”时,此信号发射。例如用户点击了菜单中的菜单项等。
    此函数一般用法为:在QObject::connect()函数中作为信号参数,用于触发“动作”所对应执行的槽函数——实现“动作”的功能函数,例如:“新建”按钮被用户按下,所需要的功能可能是新建一个文档,那么新建一个文档的动作就在这个槽函数中实现。至于此信号函数中的形参暂时可以忽略。以后会在介绍QObject类中的静态方法connect()函数时详细解说。
  7. void QAction::setCheckable ( bool );
    此函数用于设置QAction类中的私有变量: bool checkable ,此属性用以提供“动作”是否为复选动作,例如Qt Creator中“控件”菜单中的“全屏”菜单项即为复选动作菜单

🌰举例子:

#include <QApplication>
#include <QMainWindow>
#include <QMenuBar>
#include <QAction>
#include <QMessageBox>int main(int argc, char *argv[]) {QApplication app(argc, argv);QMainWindow window;// 创建 QActionQAction *action = new QAction("Show Message", &window);action->setIcon(QIcon::fromTheme("dialog-information")); // 设置图标action->setShortcut(QKeySequence("Ctrl+M"));              // 设置快捷键// 连接 triggered 信号QObject::connect(action, &QAction::triggered, []() {QMessageBox::information(nullptr, "Info", "Action triggered!");});// 创建菜单并添加 QActionQMenu *menu = window.menuBar()->addMenu("File");menu->addAction(action);window.resize(300, 200);window.show();return app.exec();
}

🌰例子2:使用Action构造工具栏和菜单栏

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{initMenu();initToolBar();
}
void MainWindow::initMenu()
{/* 初始化File菜单 */fileMenu = new QMenu(tr("File"), this);fileOpenAction = new QAction("&Open...", this);fileSaveAction = new QAction("&Save...", this);fileMenu->addAction(fileOpenAction);fileMenu->addAction(fileSaveAction);/* 初始化Edit菜单 */editMenu = new QMenu("&Edit");editCopyAction = editMenu->addAction("&Copy");editCutAction = editMenu->addAction("&Cut");/* 将菜单添加到菜单栏上 */QMenuBar *menuBar = this->menuBar();menuBar->addMenu(fileMenu);menuBar->addMenu(editMenu);
}
void MainWindow::initToolBar()
{/* 初始化FileToolBar */fileToolBar = new QToolBar(this);fileToolBar->addAction(fileOpenAction);fileToolBar->addAction(fileSaveAction);/* 初始化EditToolBar */editToolBar = new QToolBar(this);editToolBar->addAction(editCopyAction);editToolBar->addAction(editCutAction);/* 将工具添加到工具栏上 */addToolBar(Qt::TopToolBarArea, fileToolBar);addToolBar(Qt::TopToolBarArea, editToolBar);
}
MainWindow::~MainWindow()
{}

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

参考:
《Qt assistant 文档》
https://blog.csdn.net/sinat_31608641/article/details/124898305
https://www.cnblogs.com/hehe001/archive/2013/05/05/6334433.html

相关文章:

【Qt | QAction】Qt 的 QAction 类介绍

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…...

写论文一定要知道的三大AI工具!5分钟完成论文初稿

在当今的学术研究和写作领域&#xff0c;AI工具已经成为不可或缺的助手。它们不仅能够提高写作效率&#xff0c;还能帮助研究者生成高质量的论文。以下是三大值得推荐的AI工具&#xff0c;它们可以帮助你在5分钟内完成论文初稿&#xff0c;并且特别推荐千笔-AIPasspaper。 千笔…...

时装购物|时装购物系统|基于springboot的时装购物系统设计与实现(源码+数据库+文档)

时装购物系统目录 目录 基于springboot的时装购物系统设计与实现 一、前言 二、系统功能设计 三、系统实现 5.1管理员功能模块 四、数据库设计 1、实体ER图 2、具体的表设计如下所示&#xff1a; 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取…...

Android——内部/外部存储

Android 内部存储 与宿主 App 的生命周期相同&#xff0c;应用卸载时&#xff0c;会被系统自动删除。宿主 App 可以直接访问&#xff0c;无需权限。其他应用无权访问。用户访问需 Root 权限。适合存储与应用直接相关&#xff0c;隐私性或敏感性高的数据。 主要API getDataDi…...

计算机网络发展

目录 一、计算机网络的起源 1.1 ARPANET的诞生 1.2 TCP/IP协议的提出 二、互联网的兴起与普及 2.1 DNS系统的建立 2.2 万维网的诞生 2.3 互联网的商业化 三、宽带和无线网络的发展 3.1 宽带网络的普及 3.2 无线网络与移动互联网 四、互联网的未来趋势 4.1 5G与物联网…...

【后端开发】JavaEE初阶—线程的理解和编程实现

前言&#xff1a; &#x1f31f;&#x1f31f;本期讲解多线程的知识哟~~~&#xff0c;希望能帮到屏幕前的你。 &#x1f308;上期博客在这里&#xff1a;【后端开发】JavaEE初阶——计算机是如何工作的&#xff1f;&#xff1f;&#xff1f;-CSDN博客 &#x1f308;感兴趣的小伙…...

Matlab simulink建模与仿真 第十九章(生成C代码)

一、Configuration Parameters模型参数配置 1、仿真时间 &#xff08;1&#xff09;在Solver选项卡中可以设置仿真的起始时间和结束时间&#xff0c;一般起始时间设为0&#xff0c;而结束时间按需设置。 &#xff08;2&#xff09;如果希望仿真不会自动暂停&#xff08;也就…...

遍历9个格子winmine!StepBlock和遍历8个格子winmine!StepBox的对决

遍历9个格子winmine!StepBlock和遍历8个格子winmine!StepBox的对决 第一部分&#xff1a;windbg调试记录。 0: kd> g Breakpoint 10 hit winmine!DoButton1Up: 001b:0100390e a130510001 mov eax,dword ptr [winmine!xCur (01005130)] 0: kd> kc # 00 winmine…...

Python中的文件编码:揭开字符世界的神秘面纱

引言 在计算机系统中&#xff0c;数据是以二进制形式存储的。而我们日常见到的文字、符号等信息&#xff0c;则需要通过特定的方式转化为二进制数据&#xff0c;这就是编码的过程。不同的编码方式决定了如何将字符映射成字节序列。选择合适的编码方案不仅能够保证信息传输的准…...

Vue3使用hiprint——批次打印条码

例图&#xff1a;打印编号 一、安装Vue-Plugin-HiPrint 要开始使用 Vue-Plugin-HiPrint&#xff0c;首先需要安装它。可以使用 npm npm install vue-plugin-hiprint --save 二、在main.js中引入 Vue-Plugin-HiPrint 在您的 main.js 或任何其他入口文件中&#xff0c;您可以按…...

智慧城市主要运营模式分析

(一)运营模式演变 作为新一代信息化技术落地应用的新事物,智慧城市在建设模式方面借鉴了大量工程建设的经验,如平行发包(DBB,Design-Bid-Build)、EPC工程总承包、PPP等模式等,这些模式在不同的发展阶段和条件下发挥了重要作用。 在智慧城市发展模式从政府主导、以建为主、…...

典型的MVC设计模式:使用JSP和JavaBean相结合的方式来动态生成网页内容典型的MVC设计模式

先看代码与实现&#xff1a; 文件结构 triangle_area4.jsp <% page contentType"text/html;charsetUTF-8" pageEncoding"UTF-8" %> <html> <body> <%--<jsp:useBean>&#xff1a;用于在JSP中实例化JavaBean。在这里&#xff0c…...

Vue引入js脚本问题记录(附解决办法)

目录 一、需求 二、import引入问题记录 三、解决方式 一、需求 我想在我的Vue项目中引入jquery.js和bootstrap.js这种脚本文件&#xff0c;但发现不能单纯的import引入&#xff0c;问题如下。 二、import引入问题记录 我直接这么引入&#xff0c;发现控制台报错TypeError: …...

数据清洗与数据治理的关系

数据清洗与数据治理是数据处理过程中的两个重要步骤&#xff0c;它们共同确保数据的质量和可靠性&#xff0c;以便于数据分析和决策支持。 数据清洗 数据清洗&#xff08;Data Cleaning&#xff09;是指识别并纠正或删除数据集中的不准确、不完整、重复或错误的记录的过程。数…...

树莓派pico上手

0 介绍 不同于作为单板计算机的树莓派5&#xff0c;树莓派 pico 是一款低成本、高性能的微控制器板&#xff0c;具有灵活的数字接口。主要功能包括&#xff1a; 英国树莓派公司设计的 RP2040 微控制器芯片双核 Arm Cortex M0 处理器&#xff0c;弹性的时钟频率高达 133 MHz26…...

TypeError: load() missing 1 required positional argument: ‘Loader‘

标题TypeError: load() missing 1 required positional argument: ‘Loader’ 源码&#xff1a; 处理后&#xff1a; 顺利通过&#xff0c;由于yaml版本导致的问题...

根据软件架构设计与评估的叙述开发一套机器学习应用开发平台

案例 阅读以下关于软件架构设计与评估的叙述&#xff0c;回答问题 1和问题 2。 【说明】 某公司拟开发一套机器学习应用开发平台&#xff0c;支持用户使用浏览器在线进行基于机器学习的智能应用开发活动。该平台的核心应用场景是用户通过拖拽算法组件灵活定义机器学习流程&…...

【隐私计算篇】利用多方安全计算MPC实现VGG16人脸识别隐私推理

1. 背景介绍 本文主要介绍一种利用多方安全计算MPC技术&#xff0c;实现VGG16的人脸识别模型&#xff0c;侧重于模型推理阶段&#xff0c;目前已经公开专利&#xff0c;因此以下内容的分享都是基于公开材料。该分享涉及到最小化多方安全计算(MPC)以及明密文混合计算的思想&…...

Python 入门教程(3)基础知识 | 3.7、pass 关键字

文章目录 一、pass 关键字1、定义与用法2、pass 关键字的用法2.1、函数定义中的占位符2.2、 类定义中的占位符2.3、条件语句中的占位符2.4、循环中的占位符 3、注意事项 一、pass 关键字 1、定义与用法 pass语句用作将来代码的占位符。当执行pass语句时&#xff0c;不会有任何…...

nodejs基于vue+express度假村旅游管理系统设计与实现7t82p

目录 功能介绍数据库设计具体实现截图技术栈技术论证解决的思路论文目录核心代码风格详细视频演示源码获取 功能介绍 实现了一个完整的农家乐系统&#xff0c;其中主要有用户表模块、关于我们模块、收藏表模块、公告信息模块、酒店预订模块、酒店信息模块、景区信息模块、景区…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

sshd代码修改banner

sshd服务连接之后会收到字符串&#xff1a; SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢&#xff1f; 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头&#xff0c…...