当前位置: 首页 > 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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 单片机嵌入式编程中常用技术点
  • Android 将EasyPermissions进一步封装,使得动态权限申请更加简明
  • 新品亮相|美格智能SLM530/SLM530P智能模组,助力金融新零售智慧升级
  • [NSSCTF 2022 Spring Recruit]ezgame
  • 如何评估叠螺机厂家的技术能力
  • 面试时被问的问题
  • pandas:读取各类文件方法以及爬虫时json数据保存
  • RabbitMQ 07 另两种集群方式 warren(主备模式),shovel(远程模式)
  • PHP常用正则表达式大全
  • 快速傅里叶变换(FFT)时,所需指定的FFT点数如何选择
  • 【秋招笔试-支持在线评测】9.19小米秋招(已改编)-三语言题解
  • Linux - iptables防火墙
  • Flask项目入门和视图
  • 监控IDS和IPS增强网络安全性
  • 基于物联网的火灾报警器设计与实现(论文+源码)
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • ES6简单总结(搭配简单的讲解和小案例)
  • Go 语言编译器的 //go: 详解
  • js数组之filter
  • Laravel Mix运行时关于es2015报错解决方案
  • Magento 1.x 中文订单打印乱码
  • Sass Day-01
  • swift基础之_对象 实例方法 对象方法。
  • WePY 在小程序性能调优上做出的探究
  • yii2权限控制rbac之rule详细讲解
  • 服务器之间,相同帐号,实现免密钥登录
  • 近期前端发展计划
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 找一份好的前端工作,起点很重要
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #pragma once与条件编译
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (1)SpringCloud 整合Python
  • (zhuan) 一些RL的文献(及笔记)
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (篇九)MySQL常用内置函数
  • (区间dp) (经典例题) 石子合并
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .net 获取某一天 在当月是 第几周 函数
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • @Autowired 和 @Resource 区别的补充说明与示例
  • @staticmethod和@classmethod的作用与区别
  • [@Controller]4 详解@ModelAttribute
  • [1127]图形打印 sdutOJ
  • [15] 使用Opencv_CUDA 模块实现基本计算机视觉程序
  • [C++数据结构之看懂就这一篇]图(上)
  • [caffe(二)]Python加载训练caffe模型并进行测试1
  • [ccc3.0][数字钥匙] UWB配置和使用(二)
  • [FTP]pureftp部署和优化
  • [GDOUCTF 2023]<ez_ze> SSTI 过滤数字 大括号{等
  • [HarmonyOS]第一课:从简单的页面开始
  • [HDU] 1054 Strategic Game 入门树形DP