QButtonGroup

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

相关推荐
赵小哥要冲啦1 分钟前
社区邻里互助小程序从 0 到 1 复盘:需求拆解与信任机制设计
java·小程序·需求分析
xiaogai_gai5 分钟前
采购业务退款单同步实战:从钉钉审批流到金蝶云星空付款单
java·数据库·钉钉
二哈赛车手26 分钟前
新人笔记---hermes定时功能设计,具体讲解以及可优化点
java·人工智能·笔记·spring·ai·typescript
ZWZhangYu31 分钟前
从 Dify 实践理解大模型上下文缓存
java·后端·spring
揽星河..33 分钟前
【C语言】分支和循环
c语言·c++·算法
小熊恋旧34 分钟前
Python 面向对象编程:方法、属性、继承与多态详解
开发语言·python
云边云科技_云网融合35 分钟前
面向汽车零部件制造业场景的解决方案 | 70 秒:一台车下线的时间里,藏着五张网
开发语言·汽车·php
Evand J36 分钟前
【PMSM滤波例程2】PMSM未知负载转矩观测EKF。MATLAB例程(负载增广EKF与实际仿真结果)。附下载链接
开发语言·matlab·电机
AI_Lab011 小时前
宝塔用了两年,有没有必要换成轻量方案?
linux·运维·服务器
by209991 小时前
Linux GDB 调试与 CGDB 使用
linux·运维·服务器·经验分享