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

相关推荐
CoderYanger几秒前
视频切割脚本(Python版)
linux·开发语言·windows·后端·python·程序人生·职场和发展
辞旧 lekkk几秒前
CMake工程指南(一)
linux·运维·服务器·开发语言·qt·学习·萌新
迷途呀4 分钟前
新闻头条后端:新闻缓存模块
前端·redis·python·缓存·fastapi
凤年徐5 分钟前
哪些远程办公软件支持多屏协作?2026年7月远程办公工具横评:UU远程成首选,多屏协作、大文件传输等实用功能拉满
服务器
ClickHouseDB8 分钟前
ClickHouse 26.6 版本发布说明
数据库
Wang's Blog11 分钟前
Java框架快速入门:深入MyBatis-Plus高级DML操作(ID策略·逻辑删除·乐观锁)
java·数据库·mybatis
糖墨夕14 分钟前
第一章:为什么你要学 AI Agent?—— 从"切图仔"到全栈的进化之路
前端·javascript·vue.js
小七在进步17 分钟前
数据结构:用栈实现队列
开发语言·数据结构
随风一样自由18 分钟前
【前端+Canvas+航天】长征十号乙火箭回收全流程动画
前端·canvas·长征十号乙
KaMeidebaby18 分钟前
卡梅德生物技术快报|噬菌体筛选:噬菌体筛选工程化优化方案:基于侵染全链条参数调控与水环境应用验证
java·开发语言·人工智能·机器学习·spark