QActionGroup
是 Qt 框架中用于管理一组相关 QAction
对象的类。它主要用于实现互斥选择(即单选)或多选(即复选)的行为,特别是在菜单、工具栏或上下文菜单中,当存在一系列相互排斥或相关联的操作选项时,使用 QActionGroup
可以简化管理和协调这些选项的状态。以下是 QActionGroup
的主要特性和使用方法,以及详细的 C++ 代码示例:
QActionGroup 的主要特性与功能
-
互斥选择:通过将
QAction
对象添加到QActionGroup
中,并设置QActionGroup::setExclusive(true)
,可以确保同一时间内只有一个动作处于选中状态,类似单选按钮(radio button)的行为。 -
多选支持:如果不需要互斥选择,可以保持
QActionGroup
的非独占模式(默认状态),允许多个动作同时处于选中状态,类似复选框(check box)的行为。 -
状态管理:
QActionGroup
自动管理其成员动作的选中状态。当一个动作被选中时,其他相关动作会自动变为未选中状态(在独占模式下)。 -
信号:
QActionGroup
提供了triggered(QAction*)
和hovered(QAction*)
信号,分别在动作被触发(如点击菜单项)和鼠标悬停时发射,便于集中处理相关动作的行为。
QActionGroup 使用 C++ 代码示例
以下是一个基于 Qt 的 C++ 示例,展示了如何创建、配置并使用 QActionGroup
对象:
#include <QApplication>
#include <QMainWindow>
#include <QMenu>
#include <QMenuBar>
#include <QToolBar>
#include <QAction>
#include <QActionGroup>
#include <QDebug>class MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {// 创建 QActionGroupQActionGroup *actionGroup = new QActionGroup(this);actionGroup->setExclusive(true); // 设置为互斥选择模式// 创建并添加 QAction 到 QActionGroupQAction *actionRed = new QAction("&Red", actionGroup);actionRed->setCheckable(true);actionGroup->addAction(actionRed);QAction *actionGreen = new QAction("&Green", actionGroup);actionGreen->setCheckable(true);actionGroup->addAction(actionGreen);QAction *actionBlue = new QAction("&Blue", actionGroup);actionBlue->setCheckable(true);actionGroup->addAction(actionBlue);// 连接 QActionGroup 的 triggered 信号connect(actionGroup, &QActionGroup::triggered, this, &MainWindow::colorSelected);// 将动作添加到菜单QMenu *colorMenu = menuBar()->addMenu("&Colors");colorMenu->addActions(actionGroup->actions());// 将动作添加到工具栏QToolBar *colorToolbar = addToolBar("Color Toolbar");colorToolbar->addActions(actionGroup->actions());}private slots:void colorSelected(QAction *selectedAction) {QString colorName = selectedAction->text().remove('&');qDebug() << "Selected color: " << colorName;}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);MainWindow mainWindow;mainWindow.show();return app.exec();
}#include "main.moc"
在这个示例中:
- 创建了一个
QActionGroup
对象,并设置为互斥选择模式。 - 创建了三个
QAction
对象(代表颜色选项“红”、“绿”、“蓝”),设置为可检查,并将它们添加到QActionGroup
中。 - 连接
QActionGroup
的triggered
信号到MainWindow
的colorSelected
槽函数,以便在用户选择一个颜色时更新应用状态或执行相应操作。 - 将
QActionGroup
中的所有动作添加到主窗口的菜单和工具栏中。
运行此程序,您将看到一个带有“红”、“绿”、“蓝”颜色选项的菜单和工具栏。当您选择其中一个颜色时,控制台将打印出所选颜色的名称。由于 QActionGroup
设置为互斥选择模式,每次只能有一个颜色被选中,选择新的颜色会自动取消之前的选择。这就是 QActionGroup
在实现单选行为时的典型用法。如果您希望实现多选行为,只需省略 actionGroup->setExclusive(true);
这一行即可。