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 小时前
新人笔记---ApiFox的一些常见使用出错
java·笔记·spring
代码搬运媛1 小时前
Jest 测试框架详解与实现指南
前端
为何创造硅基生物1 小时前
C语言 结构体内存对齐规则(通俗易懂版)
c语言·开发语言
吃好睡好便好2 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
栗子~~2 小时前
JAVA - 二层缓存设计(本地缓冲+redis缓冲+广播所有本地缓冲失效) demo
java·redis·缓存
星寂樱易李2 小时前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
YDS8292 小时前
DeepSeek RAG&MCP + Agent智能体项目 —— RAG知识库的搭建和接口实现
java·ai·springboot·agent·rag·deepseek
counterxing2 小时前
我把 Codex 里的 Skills 做成了一个 MCP,还支持分享
前端·agent·ai编程
仰泳之鹅2 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
wangqiaowq2 小时前
windows下nginx的安装
linux·服务器·前端