本页内容

QAction Class

QAction 类为用户命令提供了一种抽象实现,这些命令可以添加到不同的用户界面组件中。更多内容...

标题: #include <QAction>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
自: Qt 6.0
继承自: QObject
被继承自:

QWidgetAction

公共类型

enum ActionEvent { Trigger, Hover }
enum MenuRole { NoRole, TextHeuristicRole, ApplicationSpecificRole, AboutQtRole, AboutRole, …, QuitRole }
enum Priority { LowPriority, NormalPriority, HighPriority }

属性

公共函数

QAction(QObject *parent = nullptr)
QAction(const QString &text, QObject *parent = nullptr)
QAction(const QIcon &icon, const QString &text, QObject *parent = nullptr)
virtual ~QAction()
QActionGroup *actionGroup() const
void activate(QAction::ActionEvent event)
(since 6.0) QList<QObject *> associatedObjects() const
bool autoRepeat() const
QVariant data() const
QFont font() const
QIcon icon() const
QString iconText() const
bool isCheckable() const
bool isChecked() const
bool isEnabled() const
bool isIconVisibleInMenu() const
bool isSeparator() const
bool isShortcutVisibleInContextMenu() const
bool isVisible() const
QMenu *menu() const
QAction::MenuRole menuRole() const
QAction::Priority priority() const
void setActionGroup(QActionGroup *group)
void setAutoRepeat(bool)
void setCheckable(bool)
void setData(const QVariant &data)
void setFont(const QFont &font)
void setIcon(const QIcon &icon)
void setIconText(const QString &text)
void setIconVisibleInMenu(bool visible)
void setMenu(QMenu *menu)
void setMenuRole(QAction::MenuRole menuRole)
void setPriority(QAction::Priority priority)
void setSeparator(bool b)
void setShortcut(const QKeySequence &shortcut)
void setShortcutContext(Qt::ShortcutContext context)
void setShortcutVisibleInContextMenu(bool show)
void setShortcuts(QKeySequence::StandardKey key)
void setShortcuts(const QList<QKeySequence> &shortcuts)
void setStatusTip(const QString &statusTip)
void setText(const QString &text)
void setToolTip(const QString &tip)
void setWhatsThis(const QString &what)
QKeySequence shortcut() const
Qt::ShortcutContext shortcutContext() const
QList<QKeySequence> shortcuts() const
bool showStatusText(QObject *object = nullptr)
QString statusTip() const
QString text() const
QString toolTip() const
QString whatsThis() const

公共槽位

void hover()
void resetEnabled()
void setChecked(bool)
void setDisabled(bool b)
void setEnabled(bool)
void setVisible(bool)
void toggle()
void trigger()

信号

void changed()
void checkableChanged(bool checkable)
void enabledChanged(bool enabled)
void hovered()
void toggled(bool checked)
void triggered(bool checked = false)
void visibleChanged()

重新实现的受保护函数

virtual bool event(QEvent *e) override

详细说明

在应用程序中,许多常用命令可通过菜单、工具栏按钮和键盘快捷键调用。由于用户期望每个命令无论使用何种用户界面都能以相同的方式执行,因此将每个命令表示为一个操作是非常有用的。

操作可以添加到菜单和工具栏等用户界面元素中,并会自动保持用户界面的同步。例如,在文字处理软件中,如果用户点击工具栏上的“加粗”按钮,菜单中的“加粗”选项就会自动被选中。

一个 QAction 可能包含图标、描述性文本、图标文本、键盘快捷键、状态文本、“这是什么?”文本以及工具提示。所有属性均可通过setIcon()、setText()、setIconText()、setShortcut()、setStatusTip()、setWhatsThis() 和setToolTip() 独立设置。 图标和文本作为最重要的两个属性,也可以在构造函数中设置。可以通过 `setFont()` 设置特定的字体,例如,当菜单将该操作显示为菜单项时,会遵循该字体设置。

我们建议将操作作为其所在窗口的子窗口来创建。在大多数情况下,操作将是应用程序主窗口的子窗口。

小部件应用程序中的 QAction

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

使用 `QWidget::addAction()` 或 `QGraphicsWidget::addAction()` 将操作添加到控件中。请注意,操作必须先添加到控件中才能使用。当快捷键应为全局时(即 `Qt::ApplicationShortcut ` 作为 `Qt::ShortcutContext`),此规则同样适用。

操作可以作为独立对象创建,也可以在构建菜单时创建。QMenu 类包含一些便捷函数,用于创建适合用作菜单项的操作。

另请参阅 QMenu 和QToolBar 。

成员类型文档

enum QAction::ActionEvent

调用QAction::activate()时使用此枚举类型

常量值描述
QAction::Trigger0这将触发QAction::triggered()信号的发出。
QAction::Hover1这将触发QAction::hovered() 信号的发射。

此枚举描述了在 macOS 上应如何将操作移入应用程序菜单。

常量值描述
QAction::NoRole0该操作不应放入应用程序菜单
QAction::TextHeuristicRole1应根据QMenuBar 文档中所述的操作文本,将此操作放入应用程序菜单。
QAction::ApplicationSpecificRole2应将此操作放入应用程序菜单,并赋予其特定于该应用程序的角色
QAction::AboutQtRole3此操作处理“关于 Qt”菜单项。
QAction::AboutRole4此操作应放置在应用程序菜单中“关于”菜单项的位置。菜单项的文本将设置为“关于 <应用程序名称>”。应用程序名称从应用程序包中的Info.plist 文件中获取(参见Qt for macOS - 部署)。
QAction::PreferencesRole5此操作应放置在应用程序菜单中“首选项...”菜单项的位置。
QAction::QuitRole6此操作应放置在应用程序菜单中“退出”菜单项的位置。

设置此值仅对菜单栏的直接菜单项有效,不适用于这些菜单的子菜单。例如,如果您的菜单栏中有“文件”菜单,且该菜单带有子菜单,则为该子菜单中的操作设置 MenuRole 不会产生任何效果。这些操作将永远不会被移动。

enum QAction::Priority

此枚举定义了用户界面中操作的优先级。

常量值描述
QAction::LowPriority0该操作在用户界面中不应被赋予优先级。
QAction::NormalPriority128 
QAction::HighPriority256该操作应在用户界面中被优先处理。

另请参阅 priority 。

属性文档

autoRepeat : bool

该属性用于指定该操作是否可以自动重复

如果为 true,当按住键盘快捷键组合时,该操作将自动重复,前提是系统已启用键盘自动重复功能。默认值为 true。

访问函数:

bool autoRepeat() const
void setAutoRepeat(bool)

通知信号:

void changed()

checkable : bool

该属性用于标识该操作是否为可切换操作

可切换操作是指具有“开启/关闭”状态的操作。例如,在文字处理软件中,“加粗”工具栏按钮可能处于开启或关闭状态。非切换操作即为命令操作;命令操作仅需执行,例如“文件”菜单中的“保存”操作。默认情况下,该属性为false 。

在某些情况下,一个切换操作的状态应取决于其他切换操作的状态。 例如,“左对齐”、“居中”和“右对齐”这三个切换操作是相互排斥的。要实现排他性切换,请将相关的切换操作添加到一个QActionGroup 中,并将该 的QActionGroup::exclusive属性设置为true。

访问函数:

bool isCheckable() const
void setCheckable(bool)

通知器信号:

void checkableChanged(bool checkable)

另请参阅 setChecked()。

checked : bool

该属性用于指定该操作是否已被选中。

只有可选中操作才能被选中。默认情况下,该值为 false(操作处于未选中状态)。

注意: 该属性的通知信号 为toggled()。由于切换QAction 会改变其状态,因此也会发出changed()信号。

访问函数:

bool isChecked() const
void setChecked(bool)

通知信号:

void toggled(bool checked)

另请参阅 checkable 和toggled()。

enabled : bool

无论该操作是否已启用,此属性均有效

用户无法选择已禁用的操作。它们不会从菜单或工具栏中消失,但其显示方式会表明它们不可用。例如,它们可能会仅以不同深浅的灰色显示。

What's This? 只要设置了QAction::whatsThis 属性,禁用操作的帮助信息仍然可用。

当某个操作被添加到的所有控件(通过QWidget::addAction()) 均处于禁用或不可见状态时,该操作将被禁用。操作被禁用时,无法通过其快捷键触发该操作。

默认情况下,此属性为true (操作处于启用状态)。

访问函数:

bool isEnabled() const
void setEnabled(bool)
void resetEnabled()

通知器信号:

void enabledChanged(bool enabled)

另请参阅 text 。

font : QFont

该属性用于设置操作的字体

font 属性用于渲染在“QAction ”中设置的文本。该字体可视为一种提示,因为根据应用程序和样式不同,并非所有情况下都会参考该字体。

默认情况下,该属性包含应用程序的默认字体。

访问函数:

QFont font() const
void setFont(const QFont &font)

通知信号:

void changed()

另请参阅 setText()。

icon : QIcon

该属性用于存储操作的图标

在工具栏中,该图标用作工具按钮的图标;在菜单中,只要QAction::iconVisibleInMenu 返回true ,该图标就会显示在菜单文本的左侧。

没有默认图标。

如果向此函数传递了一个空图标(QIcon::isNull()),则该操作的图标将被清除。

访问函数:

QIcon icon() const
void setIcon(const QIcon &icon)

通知器信号:

void changed()

iconText : QString

该属性用于存储操作的描述性图标文本

如果将QToolBar::toolButtonStyle 设置为允许显示文本的值,则此属性中定义的文本将作为标签显示在相应的工具按钮上。

如果未使用setText()或setToolTip()为操作定义文本,该文本还将作为菜单和工具提示中的默认文本;如果未使用setIcon()定义图标,该文本也将用于工具栏按钮。

如果未显式设置图标文本,则将使用该操作的常规文本作为图标文本。

默认情况下,该属性包含一个空字符串。

访问函数:

QString iconText() const
void setIconText(const QString &text)

通知信号:

void changed()

另请参阅 setToolTip() 和setStatusTip()。

iconVisibleInMenu : bool

该属性用于指定操作是否应在菜单中显示图标

在某些应用程序中,工具栏中的操作可能需要显示图标,但在菜单中则不需要。如果该属性为 true,则图标(如果有效)会在菜单中显示;如果为 false,则不会显示。

默认情况下,该属性会遵循应用程序中是否设置了Qt::AA_DontShowIconsInMenus 属性。显式设置此属性将覆盖该属性的存在(或不存在)状态。

例如:

QApplication app(argc, argv);
app.setAttribute(Qt::AA_DontShowIconsInMenus);  // Icons are *no longer shown* in menus
// ...
QAction *myAction = new QAction();
// ...
myAction->setIcon(SomeIcon);
myAction->setIconVisibleInMenu(true);   // Icon *will* be shown in menus for *this* action.

访问函数:

bool isIconVisibleInMenu() const
void setIconVisibleInMenu(bool visible)

通知信号:

void changed()

另请参阅 icon 和QCoreApplication::setAttribute()。

该属性用于指定操作的菜单角色

这表示该操作在 macOS 应用程序菜单中扮演的角色。默认情况下,所有操作都具有“TextHeuristicRole ”角色,这意味着该操作将根据其文本内容被添加到菜单中(更多信息请参阅QMenuBar )。

菜单角色只能在操作被放入 macOS 菜单栏之前进行更改(通常是在第一个应用程序窗口显示之前)。

访问函数:

QAction::MenuRole menuRole() const
void setMenuRole(QAction::MenuRole menuRole)

通知器信号:

void changed()

priority : Priority

该属性用于指定操作在用户界面中的优先级。

可以设置此属性来指定该操作在用户界面中的优先级。

例如,当工具栏设置为“Qt::ToolButtonTextBesideIcon ”模式时,LowPriority 的动作将不会显示文本标签。

访问函数:

QAction::Priority priority() const
void setPriority(QAction::Priority priority)

通知信号:

void changed()

shortcut : QKeySequence

此属性存储该操作的主快捷键

该属性的有效键码可在Qt::Key 和Qt::Modifier 中找到。该操作没有默认快捷键。

访问函数:

QKeySequence shortcut() const
void setShortcut(const QKeySequence &shortcut)

通知器信号:

void changed()

shortcutContext : Qt::ShortcutContext

该属性保存了该操作快捷方式的上下文

该属性的有效值可在Qt::ShortcutContext 中找到。默认值为Qt::WindowShortcut 。

访问函数:

Qt::ShortcutContext shortcutContext() const
void setShortcutContext(Qt::ShortcutContext context)

通知器信号:

void changed()

shortcutVisibleInContextMenu : bool

该属性用于控制某个操作是否应在上下文菜单中显示快捷键

在某些应用程序中,让操作在上下文菜单中显示快捷键可能是有意义的。如果为 true,当操作通过上下文菜单显示时,快捷键(如果有效)也会显示;如果为 false,则不显示。

默认情况下,该行为取决于应用程序是否设置了Qt::AA_DontShowShortcutsInContextMenus 属性。显式设置此属性将覆盖该属性。

访问函数:

bool isShortcutVisibleInContextMenu() const
void setShortcutVisibleInContextMenu(bool show)

通知信号:

void changed()

另请参阅 ` shortcut ` 和 `QCoreApplication::setAttribute()`。

statusTip : QString

该属性用于存储操作的状态提示

该状态提示会显示在该操作顶级父控件提供的所有状态栏上。

默认情况下,该属性包含一个空字符串。

访问函数:

QString statusTip() const
void setStatusTip(const QString &statusTip)

通知器信号:

void changed()

另请参阅 setToolTip() 和showStatusText()。

text : QString

该属性存储操作的描述性文本

如果将该操作添加到菜单中,菜单选项将由图标(如有)、文本和快捷键(如有)组成。如果未在构造函数中显式设置文本,或未通过 setText() 方法设置,则将使用该操作的描述图标文本作为菜单选项的文本。 该属性没有默认文本。

某些 UI 元素(如菜单或按钮)可以在字符前添加 '&',以自动为该字符创建助记符(快捷键)。例如,对于菜单中的“&File”,将创建快捷键Alt+F ,该快捷键将打开“文件”菜单。 对于按钮,“E&xit”将生成快捷键Alt+X ;而在菜单中,则允许通过按下“x”键导航至该菜单项。(使用“&&”可显示实际的“&”符号)。该控件可能会捕获并执行指定快捷键对应的操作。

访问函数:

QString text() const
void setText(const QString &text)

通知器信号:

void changed()

另请参阅 iconText 。

toolTip : QString

此属性用于存储操作的工具提示

此文本用于工具提示。如果未指定工具提示,则使用该操作的文本。

默认情况下,此属性包含该操作的文本。

访问函数:

QString toolTip() const
void setToolTip(const QString &tip)

通知信号:

void changed()

另请参阅 setStatusTip() 和setShortcut()。

visible : bool

该属性表示该操作是否可见(例如在菜单和工具栏中)

如果“visible”为真,则该操作可见(例如在菜单和工具栏中),且用户可以选中它;如果“visible”为假,则该操作不可见,用户也无法选中它。

不可见的操作不会被灰显;它们根本不会显示出来。

默认情况下,此属性的值为true (操作可见)。

访问函数:

bool isVisible() const
void setVisible(bool)

通知器信号:

void visibleChanged()

whatsThis : QString

此属性存储操作的“这是什么?”帮助文本

“什么是这个?”文本用于提供该操作的简要说明。该文本可以包含富文本。此操作没有默认的“什么是这个?”文本。

访问函数:

QString whatsThis() const
void setWhatsThis(const QString &what)

通知器信号:

void changed()

另请参阅 QWhatsThis 。

成员函数文档

[explicit] QAction::QAction(QObject *parent = nullptr)

使用parent 构建一个操作。如果parent 是一个操作组,则该操作将自动插入到该组中。

注意: 自 Qt 5.7 起,parent 参数为可选。

[explicit] QAction::QAction(const QString &text, QObject *parent = nullptr)

根据text 和parent 构建一个操作。如果parent 是一个操作组,则该操作将自动插入到该组中。

text 的精简版本(例如,“&Menu Option...”将变为“Menu Option”)将用于工具提示和图标文本,除非您分别通过setToolTip() 或setIconText() 指定了不同的文本。

另请参阅 text 。

[explicit] QAction::QAction(const QIcon &icon, const QString &text, QObject *parent = nullptr)

使用icon 以及text 和parent 构建一个操作。如果parent 是一个操作组,该操作将自动插入到该组中。

text 的简化版本(例如,“&菜单选项...”将变为“菜单选项”)将用于工具提示和图标文本,除非您分别使用setToolTip()或setIconText()指定了不同的文本。

另请参阅 text 和icon 。

[virtual noexcept] QAction::~QAction()

销毁该对象并释放已分配的资源。

QActionGroup *QAction::actionGroup() const

返回此操作所属的操作组。如果没有操作组管理此操作,则返回nullptr 。

另请参阅 QActionGroup 和setActionGroup()。

void QAction::activate(QAction::ActionEvent event)

向ActionEvent 发送相关信号event 。

基于操作的小部件使用此 API 使QAction 发出信号,同时也会发出自己的信号。

[since 6.0] QList<QObject *> QAction::associatedObjects() const

返回一个包含已添加此操作的对象列表。

该函数在 Qt 6.0 中引入。

另请参阅 QWidget::addAction() 和QGraphicsWidget::addAction()。

[signal] void QAction::changed()

当某个操作发生变化时,会触发此信号。如果您仅关注特定控件中的操作,可以监听随QEvent::ActionChanged 发送的QWidget::actionEvent()信号。

注意:以下属性的通知器信号 :autoRepeat 、font 、icon 、iconText 、iconVisibleInMenu 、menuRole 、priority 、shortcut 、shortcutContext 、shortcutVisibleInContextMenu 、statusTip 、text 、toolTip 以及whatsThis 。

另请参阅 QWidget::actionEvent()。

QVariant QAction::data() const

返回在QAction::setData 中设置的用户数据。

另请参阅 setData()。

[override virtual protected] bool QAction::event(QEvent *e)

重写了:QObject::event(QEvent *e)。

[slot] void QAction::hover()

这是一个调用 activate(Hover) 方法的便捷插槽。

[signal] void QAction::hovered()

当用户选中某个操作时,会发出此信号;例如,当用户将光标悬停在菜单选项或工具栏按钮上,或者按下该操作的快捷键组合时。

另请参阅 activate()。

bool QAction::isSeparator() const

如果此操作是分隔符操作,则返回true ;否则返回false 。

另请参阅 setSeparator()。

返回此操作所包含的菜单。

在控件应用程序中,包含菜单的操作可用于创建带有子菜单的菜单项,或插入到工具栏中以创建带有弹出菜单的按钮。

另请参阅 setMenu()、QMenu::addAction() 和QMenu::menuInAction()。

void QAction::setActionGroup(QActionGroup *group)

将此操作组设置为“group ”。该操作将自动添加到该组的操作列表中。

该组内的操作将相互排斥。

另请参阅 QActionGroup 和actionGroup()。

void QAction::setData(const QVariant &data)

将操作的内部数据设置为给定的data 。

另请参阅 data()。

[slot] void QAction::setDisabled(bool b)

这是一个用于enabled 属性的便捷函数,在信号-槽连接中非常有用。如果b 为true,则该操作被禁用;否则,该操作被启用。

void QAction::setMenu(QMenu *menu)

将此操作所包含的菜单设置为指定的menu 。

另请参阅 menu()。

void QAction::setSeparator(bool b)

如果 `b ` 为真,则该操作将被视为分隔符。

分隔符的显示方式取决于其插入的控件。在大多数情况下,分隔符操作中的文本、子菜单和图标将被忽略。

另请参阅 isSeparator()。

void QAction::setShortcut(const QKeySequence &shortcut)

将shortcut 设置为触发该操作的唯一快捷键。

注意: 这是属性shortcut 的设置 函数。

另请参阅 shortcut 和setShortcuts()。

void QAction::setShortcuts(QKeySequence::StandardKey key)

根据key 设置一组与平台相关的快捷键列表。调用此函数的结果将取决于当前运行的平台。请注意,此操作可分配多个快捷键。如果仅需主快捷键,请改用setShortcut 。

另请参阅 shortcuts() 和QKeySequence::keyBindings()。

void QAction::setShortcuts(const QList<QKeySequence> &shortcuts)

将 `shortcuts ` 设置为触发该操作的快捷键列表。列表中的第一个元素是主快捷键。

另请参阅 shortcut 以及setShortcut()。

QKeySequence QAction::shortcut() const

返回主快捷方式。

注意: 这是属性 shortcut 的获取器 函数。

另请参阅 setShortcuts()。

QList<QKeySequence> QAction::shortcuts() const

返回快捷方式列表,其中主快捷方式作为列表的第一个元素。

另请参阅 ` setShortcuts()`。

bool QAction::showStatusText(QObject *object = nullptr)

通过发送QStatusTipEvent 来更新由object 表示的UI的相关状态栏。如果已发送事件,则返回true ;否则返回false 。

如果指定了 null 小部件,则将事件发送到该操作的父级。

另请参阅 statusTip 。

[slot] void QAction::toggle()

这是一个用于checked 属性的便捷函数。调用该函数可将选中状态切换为相反状态。

[signal] void QAction::toggled(bool checked)

每当可选中操作(checkable action)的isChecked()状态发生变化时,都会触发此信号。这可能是用户交互的结果,也可能是因为调用了setChecked()。由于setChecked()会更改QAction ,因此它除了触发toggled()外,还会触发changed()。

checked 如果该操作被选中,则返回 true;如果未被选中,则返回 false。

注意: 这是属性checked 的Notifier 信号。

另请参阅 activate()、triggered() 以及checked 。

[slot] void QAction::trigger()

这是一个用于调用 activate(Trigger) 的便捷槽。

[signal] void QAction::triggered(bool checked = false)

当用户触发某个操作时,会发出此信号;例如,当用户单击菜单选项、工具栏按钮,或按下操作的快捷键组合时,或者调用trigger()方法时。需要注意的是,当调用setChecked()或toggle()方法时,不会发出此信号。

如果该操作可选中,当该操作被选中时,checked 返回 true;若未被选中,则返回 false。

另请参阅 activate()、toggled() 以及checked 。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.