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

相关推荐
小兵张健7 小时前
价值1000的 AI 工作流:Codex 通用前端协作模式
前端·aigc·ai编程
sunny_8 小时前
面试踩大坑!同一段 Node.js 代码,CJS 和 ESM 的执行顺序居然是反的?!99% 的人都答错了
前端·面试·node.js
拉不动的猪8 小时前
移动端调试工具VConsole初始化时的加载阻塞问题
前端·javascript·微信小程序
NE_STOP8 小时前
MyBatis-配置文件解读及MyBatis为何不用编写Mapper接口的实现类
java
数据组小组9 小时前
免费数据库管理工具深度横评:NineData 社区版、Bytebase 社区版、Archery,2026 年开发者该选哪个?
数据库·测试·数据库管理工具·数据复制·迁移工具·ninedata社区版·naivicat平替
ayqy贾杰10 小时前
Agent First Engineering
前端·vue.js·面试
IT_陈寒10 小时前
SpringBoot实战:5个让你的API性能翻倍的隐藏技巧
前端·人工智能·后端
iceiceiceice10 小时前
iOS PDF阅读器段评实现:如何从 PDFSelection 精准还原一个自然段
前端·人工智能·ios
大金乄11 小时前
封装一个vue2的elementUI 表格组件(包含表格编辑以及多级表头)
前端·javascript
葡萄城技术团队11 小时前
【性能优化篇】面对万行数据也不卡顿?揭秘协同服务器的“片段机制 (Fragments)”
前端