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 |
继承于 |
公共类型
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() 将动作添加到 widget 中。请注意,必须先将操作添加到部件中,然后才能使用。当快捷方式应是全局的(即Qt::ApplicationShortcut 如Qt::ShortcutContext )时,情况也是如此。
操作可以作为独立对象创建。但它们也可以在菜单构建过程中创建。QMenu 类包含用于创建适合用作菜单项的操作的方便函数。
成员类型文档
enum QAction::ActionEvent
该枚举类型在调用QAction::activate() 时使用。
常量 | 值 | 说明 |
---|---|---|
QAction::Trigger | 0 | this 将触发QAction::triggered() 信号。 |
QAction::Hover | 1 | 将发出QAction::hovered() 信号。 |
enum QAction::MenuRole
该枚举描述了在 macOS 上应如何将操作移入应用程序菜单。
常量 | 值 | 说明 |
---|---|---|
QAction::NoRole | 0 | 此操作不应放入应用程序菜单 |
QAction::TextHeuristicRole | 1 | 此操作应根据QMenuBar 文档中描述的操作文本放入应用程序菜单。 |
QAction::ApplicationSpecificRole | 2 | 该操作应被放入应用程序菜单,并具有特定的应用程序角色 |
QAction::AboutQtRole | 3 | 该操作处理 "关于 Qt "菜单项。 |
QAction::AboutRole | 4 | 该操作应放在应用程序菜单中 "关于 "菜单项所在的位置。菜单项的文本将设置为 "About <application name>(关于 <应用程序名称>)"。应用程序名称取自应用程序捆绑包中的Info.plist 文件(请参阅Qt for macOS - 部署)。 |
QAction::PreferencesRole | 5 | 此操作应放在应用程序菜单中 "Preferences...(首选项...)"菜单项的位置。 |
QAction::QuitRole | 6 | 此操作应放在应用程序菜单中 "退出 "菜单项的位置。 |
设置此值只对菜单栏中的直接菜单项有效,对这些菜单的子菜单无效。例如,如果您的菜单栏中有 "文件 "菜单,而 "文件 "菜单中又有一个子菜单,那么为该子菜单中的操作设置 MenuRole 就没有任何作用。它们永远不会被移动。
enum QAction::Priority
该枚举定义了用户界面中操作的优先级。
常数 | 值 | 说明 |
---|---|---|
QAction::LowPriority | 0 | 该操作在用户界面中不应有优先级。 |
QAction::NormalPriority | 128 | |
QAction::HighPriority | 256 | 在用户界面中应优先执行该操作。 |
另请参阅 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) |
Notifier 信号:
void | checkableChanged(bool checkable) |
另请参见 setChecked().
checked : bool
该属性表示该操作是否被选中。
只有可选中的操作才能被选中。默认情况下,该属性为 false(动作未选中)。
访问功能:
bool | isChecked() const |
void | setChecked(bool) |
通知信号:
void | toggled(bool checked) |
enabled : bool
该属性表示操作是否启用
禁用的操作用户无法选择。它们不会从菜单或工具栏中消失,但会以一种表示不可用的方式显示。例如,它们可能只以灰色阴影显示。
What's This? 如果设置了 属性,禁用操作的帮助仍然可用。QAction::whatsThis
当所有添加了该操作(使用QWidget::addAction()) 的部件都已禁用或不可见时,该操作将被禁用。当一个操作被禁用时,就无法通过其快捷方式触发它。
默认情况下,该属性为true
(动作已启用)。
访问功能:
bool | isEnabled() const |
void | setEnabled(bool) |
void | resetEnabled() |
Notifier 信号:
void | enabledChanged(bool enabled) |
另请参见 text 。
font : QFont
该属性用于保存操作的字体
字体属性用于渲染在QAction 上设置的文本。字体可视为一种提示,因为它不会在所有情况下都根据应用和样式进行调整。
默认情况下,该属性包含应用程序的默认字体。
访问功能:
QFont | font() const |
void | setFont(const QFont &font) |
Notifier 信号:
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) |
Notifier 信号:
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) |
Notifier 信号:
void | changed() |
另请参阅 icon 和QCoreApplication::setAttribute() 。
menuRole : MenuRole
该属性包含动作的菜单角色
表示该操作在 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) |
Notifier 信号:
void | changed() |
另请参阅 shortcut 和QCoreApplication::setAttribute() 。
statusTip : QString
该属性用于保存操作的状态提示
状态提示显示在该操作的顶层父窗口部件提供的所有状态栏上。
默认情况下,该属性包含一个空字符串。
访问函数:
QString | statusTip() const |
void | setStatusTip(const QString &statusTip) |
Notifier 信号:
void | changed() |
另请参阅 setToolTip() 和showStatusText()。
text : QString
该属性包含动作的描述性文本
如果该操作被添加到菜单中,菜单选项将由图标(如果有的话)、文本和快捷方式(如果有的话)组成。如果在构造函数中没有明确设置文本,或没有使用 setText() 设置文本,则将使用操作的描述图标文本作为文本。没有默认文本。
某些用户界面元素(如菜单或按钮)可以在字符前使用"&"来自动为该字符创建一个助记符(快捷方式)。例如,菜单中的"&File "将创建快捷方式Alt+F ,打开文件菜单。"E&xit "将为按钮创建快捷方式Alt+X ,或在菜单中通过按 "x "键导航到菜单项。(使用"&&"可显示一个真正的 "ampersand "符号)。Widget 可能会消耗并执行给定快捷方式上的操作。
访问功能:
QString | text() const |
void | setText(const QString &text) |
通知信号:
void | changed() |
另请参阅 iconText 。
toolTip : QString
该属性用于保存动作的工具提示
该文本用于工具提示。如果没有指定工具提示,则使用动作文本。
默认情况下,该属性包含动作文本。
访问功能:
QString | toolTip() const |
void | setToolTip(const QString &tip) |
Notifier 信号:
void | changed() |
另请参阅 setStatusTip() 和setShortcut()。
visible : bool
该属性表示该操作是否可见(例如在菜单和工具栏中)。
如果visible为 true,则用户可以看到(例如在菜单和工具栏中)并选择操作;如果visible为 false,则用户无法看到或选择操作。
不可见的操作不会显示为灰色,而是完全不显示。
默认情况下,该属性为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 XML 5.7 起,parent 参数为可选参数。
[explicit]
QAction::QAction(const QString &text, QObject *parent = nullptr)
用text 和parent 构建一个动作。如果parent 是一个动作组,该动作将自动插入该组。
除非分别使用setToolTip() 或setIconText() 指定不同的文本,否则工具提示和图标文本将使用text 的剥离版本(例如,"&Menu Option... "变为 "Menu Option")。
另请参阅 text 。
[explicit]
QAction::QAction(const QIcon &icon, const QString &text, QObject *parent = nullptr)
构造一个包含icon 以及text 和parent 的操作。如果parent 是一个操作组,该操作将自动插入该组。
除非分别使用setToolTip() 或setIconText() 指定不同的文本,否则工具提示和图标文本将使用text 的剥离版本(例如,"&Menu Option... "变为 "Menu Option")。
[virtual noexcept]
QAction::~QAction()
销毁对象并释放已分配的资源。
QActionGroup *QAction::actionGroup() const
返回此操作的操作组。如果没有操作组管理此操作,则将返回nullptr
。
另请参阅 QActionGroup 和setActionGroup()。
void QAction::activate(QAction::ActionEvent event)
为ActionEvent event 发送相关信号。
基于操作的 widget 可使用此 API 使QAction 发送信号,同时也发送自己的信号。
[since 6.0]
QList<QObject *> QAction::associatedObjects() const
返回已添加此操作的对象列表。
此函数在 Qt 6.0 中引入。
另请参阅 QWidget::addAction() 和QGraphicsWidget::addAction()。
[signal]
void QAction::changed()
该信号在操作发生变化时发出。如果您只对给定 widget 中的操作感兴趣,可以查看QWidget::actionEvent() 发送的QEvent::ActionChanged 。
注: 属性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() 。
QMenu *QAction::menu() const
返回该操作包含的菜单。
在 widget 应用程序中,包含菜单的操作可用于创建带子菜单的菜单项,或插入工具栏以创建带弹出菜单的按钮。
另请参阅 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 为 true,则该操作将被视为分隔符。
如何表示分隔符取决于插入的部件。在大多数情况下,分隔符操作将忽略文本、子菜单和图标。
另请参见 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
返回主快捷方式。
注: 属性快捷方式的获取函数。
另请参阅 setShortcuts()。
QList<QKeySequence> QAction::shortcuts() const
返回快捷方式列表,主快捷方式为列表的第一个元素。
另请参见 setShortcuts()。
bool QAction::showStatusText(QObject *object = nullptr)
通过发送QStatusTipEvent 更新object 所代表的用户界面的相关状态栏。如果发送了事件,则返回true
,否则返回false
。
如果指定的部件为空,事件将发送到操作的父节点。
另请参见 statusTip 。
[slot]
void QAction::toggle()
这是checked 属性的方便函数。连接该函数可将选中状态更改为相反状态。
[signal]
void QAction::toggled(bool checked)
每当可检查操作改变其isChecked() 状态时,就会发出该信号。这可能是用户交互的结果,也可能是因为调用了setChecked() 。当setChecked() 更改QAction 时,除了触发changed() 之外,还会发出 () 信号。
checked 如果操作已选中,则为 true;如果操作未选中,则为 false。
注: 属性checked 的通知信号。
另请参阅 activate()、triggered() 和checked 。
[slot]
void QAction::trigger()
这是一个调用 activate(Trigger) 的便利槽。
[signal]
void QAction::triggered(bool checked = false)
当用户激活某个操作时,例如用户点击菜单选项、工具栏按钮或按下某个操作的快捷组合键,或者调用trigger() 时,就会发出该信号。值得注意的是,调用setChecked() 或toggle() 时不会发出该指令。
如果操作是可选中的,则checked 在操作选中时为 true,在操作未选中时为 false。
© 2025 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.