【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() const
 
Qt::ShortcutContext shortcutContext() const
 
QList<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;
 
    // 创建 QAction
    QAction *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!");
    });
 
    // 创建菜单并添加 QAction
    QMenu *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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/881902.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OSG开发笔记(三十):OSG加载动力学仿真K模型文件以及测试Demo

​ 若该文为原创文章&#xff0c;未经允许不得转载 本文章博客地址&#xff1a;https://blog.csdn.net/qq21497936/article/details/142340138 各位读者&#xff0c;知识无穷而人力有穷&#xff0c;要么改需求&#xff0c;要么找专业人士&#xff0c;要么自己研究 长沙红胖子Q…

【STL】 set 与 multiset:基础、操作与应用

在 C 标准库中&#xff0c;set 和 multiset 是两个非常常见的关联容器&#xff0c;主要用于存储和管理具有一定规则的数据集合。本文将详细讲解如何使用这两个容器&#xff0c;并结合实例代码&#xff0c;分析其操作和特性。 0.基础操作概览 0.1.构造&#xff1a; set<T&…

解决nginx代理SSE接口的响应没有流式返回

目录 现象原来的nginx配置解决 现象 前后端分离的项目&#xff0c;前端访问被nginx反向代理的后端SSE接口&#xff0c;预期是流式返回&#xff0c;但经常是很久不响应&#xff0c;一响应全部结果一下子都返回了。查看后端项目的日志&#xff0c;响应其实是流式产生的。推测是n…

【BurpSuite】Cross-site scripting (XSS 学徒部分:1-9)

&#x1f3d8;️个人主页&#xff1a; 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞&#x1f44d;收藏&#x1f497;支持一下哦 【BurpSuite】Cross-site scripting (XSS 学徒部分:1-9&#xff09; 实验一 Lab: Reflected XSS into HTML context with nothing…

[Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

javase复习day30综合练习

制造假数据 制造数据 练习一 package Demo1;import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; im…

react hooks--React.memo

基本语法 React.memo 高阶组件的使用场景说明&#xff1a; React 组件更新机制&#xff1a;只要父组件状态更新&#xff0c;子组件就会无条件的一起更新。 子组件 props 变化时更新过程&#xff1a;组件代码执行 -> JSX Diff&#xff08;配合虚拟 DOM&#xff09;-> 渲…

数据结构:二叉树OJ题(基础版)

前言 更完两期二叉树的知识之后&#xff0c;来做几道oj题巩固一下基础 一、翻转二叉树 链接&#xff1a;leetcode链接 还是分治思想&#xff0c;将问题分解成左子树和右子树交换&#xff0c;遇到空树停止 采用递归算法做题 TreeNode* invertTree(TreeNode* root) {if(root …

Golang | Leetcode Golang题解之第409题最长回文串

题目&#xff1a; 题解&#xff1a; func longestPalindrome(s string) int {mp : map[byte]int{}for i : 0; i < len(s); i {mp[s[i]]}res : 0for _, v : range mp {if v&1 1 {res v - 1} else {res v}}if res<len(s) {res}return res }

华为HarmonyOS地图服务 3 - 如何开启和展示“我的位置”?

一. 场景介绍 本章节将向您介绍如何开启和展示“我的位置”功能&#xff0c;“我的位置”指的是进入地图后点击“我的位置”显示当前位置点的功能。效果如下&#xff1a; 二. 接口说明 “我的位置”功能主要由MapComponentController的方法实现&#xff0c;更多接口及使用方法…

基于51单片机的手环设计仿真

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机&#xff0c;DHT11温湿度采集温湿度&#xff0c;滑动变阻器连接ADC0832数模转换器模拟水位传感器检测水位&#xff0c;通过LCD1602显示信息&#xff0c;然后在程序里设置好是否…

JavaEE: 创造无限连接——网络编程中的套接字

文章目录 Socket套接字TCP和UDP的区别有连接/无连接可靠传输/不可靠传输面向字节流/面向数据报全双工/半双工 UDP/TCP api的使用UDPDatagramSocketDatagramPacketInetSocketAddress练习 TCPServerSocketSocket练习 Socket套接字 Socket是计算机网络中的一种通信机制&#xff0…

代码随想录算法训练营第五十八天 | 拓扑排序精讲-软件构建

目录 软件构建 思路 拓扑排序的背景 拓扑排序的思路 模拟过程 判断有环 写代码 方法一&#xff1a; 拓扑排序 软件构建 题目链接&#xff1a;卡码网&#xff1a;117. 软件构建 文章讲解&#xff1a;代码随想录 某个大型软件项目的构建系统拥有 N 个文件&#xff0c;文…

机器人的动力学——牛顿欧拉,拉格朗日,凯恩

机器人的动力学推导方法有很多&#xff0c;常用得有牛顿&#xff0c;拉格朗日&#xff0c;凯恩等方法&#xff0c;接下来&#xff0c;简单说说他们之间的使用。注&#xff1a;这里不考虑怎么来的&#xff0c;只说怎么应用。 参考1&#xff1a;4-14动力学分析方法-牛顿—欧拉方…

聚焦API安全未来,F5打造无缝集成的解决方案

研究发现&#xff0c;目前超过90%的基于Web的网络攻击都以API端点为目标。随着对API使用需求的增加&#xff0c;这些攻击还会持续增长。现代企业需要一种动态防御策略&#xff0c;在风险升级成代价高昂、令人警惕且往往无法预防的API安全漏洞之前&#xff0c;发现并降低风险。 …

数据库提权【笔记总结】

文章目录 UDF提权以有webshell只有数据库权限条件复现msf工具sql语句提权 MOF提权前言条件复现msf工具php脚本提权 sqlserver提权前言条件xp_cmdshell提权复现 沙盒提权介绍复现 Oracle提权靶场搭建执行任意命令复现 通过注入存储过程提权&#xff08;低权限提升至DBA&#xff…

C++从入门到起飞之——多态 全方位剖析!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1. 多态的概念 2. 多态的定义及实现 2.1 多态的构成条件 2.1.1 实现多态还有两个必须重要条件&…

群晖NAS使用Docker本地部署网页版Ubuntu系统并实现无公网IP远程访问

文章目录 前言1. 下载Docker-Webtop镜像2. 运行Docker-Webtop镜像3. 本地访问网页版Linux系统4. 群晖NAS安装Cpolar工具5. 配置异地访问Linux系统6. 异地远程访问Linux系统7. 固定异地访问的公网地址 前言 本文旨在详细介绍如何在群晖NAS部署docker-webtop&#xff0c;并结合c…

通用接口开放平台设计与实现——(31)API服务线程安全问题确认与修复

背景 在本系列的前面一篇博客评论中&#xff0c;有小伙伴指出&#xff0c;API服务存在线程安全问题&#xff1a; https://blog.csdn.net/seawaving/article/details/122905199#comments_34477405 今天来确认下&#xff0c;线程是否安全&#xff1f;如不安全&#xff0c;如何…

高配小主机加装SSD固态硬盘,我选择性能与设计兼备的希捷酷鱼 530

高配小主机加装SSD固态硬盘&#xff0c;我选择性能与设计兼备的希捷酷鱼 530 哈喽小伙伴们好&#xff0c;我是Stark-C~ 我最近入手了零刻的一款新发布的 GTi12 Ultra高性能迷你主机&#xff0c;其出色的配置与强大的功能让我有了将它用作主力机的打算。不过因为它的高配版本搭…