QButtonGroup
QButtonGroup 是 Qt 中用于逻辑分组按钮(如 QRadioButton、QPushButton、QCheckBox 等)的非界面控件类。它本身不是一个可视控件,而是管理多个按钮的集合,方便统一控制按钮的行为和信号。
主要功能和特点
- 按钮分组管理
将多个按钮(单选按钮、多选框、普通按钮等)添加到一个组内,便于统一管理。 - 互斥选择
对于单选按钮组,QButtonGroup 默认启用互斥模式(exclusive),保证组内只有一个按钮被选中。 - 信号集中处理
提供统一的信号,如 buttonClicked(int id),当组内任一按钮被点击时,发送带有按钮 ID 的信号,方便集中处理。 - 按钮 ID 绑定
添加按钮时可以给每个按钮指定一个整数 ID,便于识别和管理。 - 支持多种按钮类型
不仅限于 QRadioButton,也支持 QCheckBox、QPushButton 等任意继承自 QAbstractButton 的按钮。 - 非可视控件
它不占用界面空间,只负责逻辑管理按钮。
典型应用场景
- 实现单选按钮的分组互斥(尤其按钮不在同一父控件时)
- 多按钮组统一处理点击事件
- 为按钮组内按钮绑定唯一标识 ID,方便事件响应和业务处理
主要方法和用法简介
- *addButton(QAbstractButton button, int id = -1)
添加按钮到组内,并可选指定按钮 ID。 - *removeButton(QAbstractButton button)
从组内移除按钮。 - button(int id) const
根据 ID 获取对应按钮指针。 - buttons() const
获取组内所有按钮列表。 - setExclusive(bool exclusive)
设置是否启用互斥模式(默认 true)。 - isExclusive() const
查询是否启用互斥。 - buttonClicked(int id) (信号)
按钮点击时发出,携带按钮 ID。 - buttonToggled(int id, bool checked) (信号)
按钮切换状态时发出,携带按钮 ID 和状态。
使用示例
QRadioButton* rb1 = new QRadioButton("选项1", this);
QRadioButton* rb2 = new QRadioButton("选项2", this);
QPushButton* pb1 = new QPushButton("普通按钮", this);
QButtonGroup* group = new QButtonGroup(this);
group->addButton(rb1, 1);
group->addButton(rb2, 2);
group->addButton(pb1, 3);
connect(group, QOverload<int>::of(&QButtonGroup::buttonClicked), this, [](int id){
qDebug() << "按钮 ID:" << id << "被点击";
});
总结
QButtonGroup 是一个非常实用的逻辑控件,帮助你:
- 把多个按钮组合成一个组
- 实现互斥单选
- 简化信号槽处理
- 方便管理和识别按钮
部分内容省略了,课程内容有完整的详细教程。
计算机技术课程
https://blog.csdn.net/2301_76542477/article/details/149032632?spm=1011.2415.3001.5331