QActionGroup 是 Qt 框架中用于管理多个 QAction 的类,属于 Qt Widgets 模块。以下是对其功能和用法的详细说明:
1. 核心功能
- 分组管理:将多个 QAction 组织成逻辑组,便于统一操作。
- 互斥选择:支持设置组内动作是否互斥(默认启用),类似单选按钮,同一时间只能选中一个动作。
- 状态控制:批量启用/禁用或修改组内动作的属性。
- 信号传递:提供触发动作的信号,简化事件处理。
2. 创建与基本用法
2.1 创建 QActionGroup
c
QActionGroup *group = new QActionGroup(this); // 创建组,默认互斥
group->setExclusive(true); // 显式设置互斥(默认已启用)
2.2 添加动作
c
QAction *action1 = new QAction("Action 1", this);
QAction *action2 = new QAction("Action 2", this);
action1->setCheckable(true); // 必须设为可选中
action2->setCheckable(true);
group->addAction(action1);
group->addAction(action2);
3. 关键特性
-
互斥性(Exclusivity):
- 默认启用,通过
setExclusive(false)
可禁用(允许多选)。 - 仅当动作为
checkable
时生效。
- 默认启用,通过
-
信号与槽:
triggered(QAction\*)
:当动作被触发(如点击)时发射。hovered(QAction\*)
:鼠标悬停在动作上时发射。
示例连接槽函数:
cconnect(group, &QActionGroup::triggered, this, &MyClass::handleAction);
-
批量状态控制:
cgroup->setEnabled(false); // 禁用所有组内动作
4. 应用场景
- 菜单互斥选项:如"视图"菜单中的"左对齐"、"居中"、"右对齐"。
- 工具栏按钮组:如图片编辑工具中的"画笔"、"橡皮擦"。
- 动态控制界面:根据应用状态启用/禁用一组功能。
5. 常用方法
actions()
:获取组内所有动作的列表。addAction(QAction\*)
/removeAction(QAction\*)
:添加或移除动作。setExclusive(bool)
:设置是否启用互斥。
6. 注意事项
- Checkable 属性 :确保需要互斥的动作设置为
setCheckable(true)
。 - 信号处理 :使用
triggered
信号而非toggled
,后者可能多次触发。 - 非互斥模式:禁用互斥后,动作可独立选中(类似复选框)。
7. 示例代码
c
// 创建动作组和动作
QActionGroup *alignmentGroup = new QActionGroup(this);
alignmentGroup->setExclusive(true);
QAction *leftAlign = new QAction("左对齐", this);
leftAlign->setCheckable(true);
alignmentGroup->addAction(leftAlign);
QAction *centerAlign = new QAction("居中", this);
centerAlign->setCheckable(true);
alignmentGroup->addAction(centerAlign);
// 将动作添加到菜单
QMenu *formatMenu = menuBar()->addMenu("格式");
formatMenu->addActions(alignmentGroup->actions());
// 连接信号
connect(alignmentGroup, &QActionGroup::triggered, this, &MainWindow::updateTextAlignment);
8. 总结
QActionGroup 提供了一种高效管理相关动作的方式,尤其适用于需要互斥选择的场景。通过统一的状态控制和信号机制,开发者可以简化代码并提升用户体验。