QAction类详解

QAction类详解nbsp nbsp nbsp nbsp nbsp QAction 类提供了抽象的用户界面 action 这些 action 可以被放置在窗口部件中 nbsp nbsp nbsp nbsp 应用程序可以通过菜单 工具栏按钮以及键盘快捷键来调用通用的命令 由于用户期望每个命令都能以相同的方式执行 而不管命令所使用的用户界面 这个时候使用 action 来表示这些命令就显得十分有用 nbsp nbsp nbsp nbsp nbsp Actions 可以被添加到菜单和工具栏中 并且可以自动保持在

 

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

我们建议将actions作为使用它们的窗口的孩子创建。在绝大多数情况下,actions都是应用程序主窗口的孩子。

类的枚举成员变量:

QAction类详解

 这个枚举类型主要是在调用QAction::activate()函数的时候被使用到。我们来看看QAction::activate()函数的原型:

QAction类详解

       从上面可以看出,我们使用该函数发射信号,而参数event则指明了发射的信号类型。基于action的widgets可以自己发射信号,然而我们也可以显式的调用本API来发射信号。

QAction类详解

         由于Mac OS X系统的一些特性,Qt 会对一些菜单项进行自动排列。比如,如果你的菜单是“关于”、“设置”、“首选项”、“退出”等等,我们可以给它们分配一个角色,Qt 则会根据这些角色对菜单项的顺序作出正确的排列。方法是,设置 QAction::menuRole 属性,例如:AboutRole、PreferencesRole、QuitRole 或者 NoRole。举例来说,我们可以将“设置”菜单项作为 Mac OS X 的 Application::preferences。

         QAction::MenuRole类型的枚举主要描述了在Mac OS X系统上,action如何移动到应用程序的菜单上。设置这个值只对菜单上的直接菜单有效,对子菜单无效。例如:如果有一个File菜单,该File菜单又包含有子菜单,那么如果你针对子菜单设置这些值,那么这些值永远不会起作用。

QAction类详解

      该优先级用于表明action在用户界面上的优先级。例如,当你的工具栏设置了Qt::ToolButtonTextBesideIcon模式,那么低优先级的actions将不会显示出标签。

示例

(1) 使用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() { }

(2)测试QAction::activate(QAction::ActionEvent)

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { initMenu(); initToolBar(); initConnect(); } void MainWindow::initConnect() { connect(fileOpenAction, SIGNAL(triggered()), this, SLOT(sendActivate())); connect(fileSaveAction, SIGNAL(hovered()), this, SLOT(ansHovered())); } void MainWindow::sendActivate() { /* 这将会导致fileSaveAction发送信号QAction::hovered() */ fileSaveAction->activate(QAction::Hover); } void MainWindow::ansHovered() { qDebug("Ans!!!"); }

运行结果:

QAction类详解

(3)测试QAction::Priority

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(QIcon(":/cut.PNG"), "&Cut"); //editCutAction->setPriority(QAction::LowPriority); /* 将菜单添加到菜单栏上 */ 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); /* 设置工具栏为QT::ToolButtonTextBesideIcon */ this->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); }

此时注释掉了设置优先级的语句,图标和文字均能显示出来,效果如下图:

QAction类详解

/* 初始化Edit菜单 */ editMenu = new QMenu("&Edit"); editCopyAction = editMenu->addAction("&Copy"); editCutAction = editMenu->addAction(QIcon(":/cut.PNG"), "&Cut"); editCutAction->setPriority(QAction::LowPriority);

运行效果如下:

QAction类详解

 

参考:

https://www.yuque.com/docs/share/8c9cd912-4fbc-4656-82b7-9815f9b199d0

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205742.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午5:18
下一篇 2026年3月19日 下午5:18


相关推荐

  • 青鸟s1java云题库答案_北大青鸟S1java内部测试试卷(试题)

    青鸟s1java云题库答案_北大青鸟S1java内部测试试卷(试题)本测试题为北大青鸟内部 java 测试题 仅供参考理论知识试卷注意 将答案写在答题纸上 不得在试卷上作答 选择题 针对以下题目 请选择最符合题目要求的答案 针对每一道题目 所有答案都选对 该题目得分 所选答案错误或不能选出所有答案 则该题不得分 50 题 每小题 2 分 1 下面 A C 是合法的

    2026年3月19日
    1
  • origin相关绘图操作[通俗易懂]

    origin相关绘图操作[通俗易懂]博客的另外地址:http://www.datalearner.com/blog/1051510886845466日常绘图时,会使用都origin,其是一款非常强大的制图工具,以下内容,会记录我使用过的功能,使用方法操作。其强大的功能,我认为就是图层的使用,可以绘制多张图,利用图层管理将多张图进行合并,而且操作随意性好。如下,是我从网络上截取的几张图。origin添加数据origin添加数据非

    2022年5月6日
    83
  • 中星资料集合

    中星资料集合6B 调星指南 1 确保锅的南面 45 上面没有遮挡物 如楼房树等 2 nbsp 锅装后 将高频头 0 刻度向水平方向 馈源盘上边刚好遮住高频头 38 刻度 取一杯水倒在锅里 然后调节伸缩杆 让锅里的水刚好溢出 这样锅的仰角 极化角和焦距就基本上调好了 然后选一个中央台 调好方位角 再细调就可以了 3 nbsp http www asiat

    2026年3月19日
    3
  • java 上传文件接口_Java接口实现文件上传

    java 上传文件接口_Java接口实现文件上传因工作需要,在后台管理页面加入一个上传文件的模块,虽然接口的代码很简单,但实现期间遇到了一些比较有趣的坑,特记录下来。需求实现文件上传,并提供一个可供下载的路径。想法文件上传代码暂且不谈,先说说文件放在服务器什么位置比较合适。我首先想到的是两个地方:tomcat的webapps/ROOT目录下,如果放在这个目录下,数量少了还好,一旦数量多了,必定会影响tomcat本身的运行速度。这个虽然可用但不可…

    2022年5月14日
    45
  • OpenClaw 完全指南:部署你的 7×24 小时开源 AI 助手

    OpenClaw 完全指南:部署你的 7×24 小时开源 AI 助手

    2026年3月15日
    3
  • SVN和Git的使用

    SVN和Git的使用SVN 是集中式的管理 如服务器上有一个文件夹 里面有很多的文件 即源代码 每个人写完后都往服务器中提交 一个新的项目成员从服务器中去下载该版本 这就是 SVN 所谓的集中式管理 GIT 是分布式的管理 它与 Maven 的概念很像 它有一个中央仓库来保存代码 本地有本地 git 仓库 代码在中央仓库中存一份 本地的仓库中也存一份 GIT 的优点 当服务器坏了 出现了代码的丢失时 不用担心 因为本地还有一份 GIT 的使用步骤 1 代码写完后要先提交到本地仓库 2 把本地仓库中的代码推送到中央仓库

    2026年3月17日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号