QButtonGroup (Qt)

这里写目录标题

介绍

QRadioButton 是用于创建单选按钮的类,它允许用户从一组互斥的选项中选择一个。QButtonGroup 则是一个容器类,用于管理一组按钮(通常是 QRadioButton 或 QCheckBox),自动处理它们的互斥行为,例如确保同一时刻只有一个按钮被选中

添加和删除按钮

添加按钮,使用函数addButton,这个函数的原型是:

cpp 复制代码
void QButtonGroup::addButton(QAbstractButton *button, int id = -1);

button 这个参数的代表你要添加的按钮,而后面的 id则是你要添加的按钮的序号,如果id等于-1,根据容器里按钮的id来自动的给按钮添加一个id。自动添加的id,默认会从-2开始。

cpp 复制代码
QRadioButton *radio1 = new QRadioButton("选项1");
QRadioButton *radio2 = new QRadioButton("选项2");
QRadioButton *radio3 = new QRadioButton("选项3");
radio1->setChecked(true); // 设置默认选中
QButtonGroup m_group;

m_group_2.addButton(radio1);
m_group_2.addButton(radio2);
m_group_2.addButton(radio3);

// 此时按钮的id分别是-2、-3、-4
QButtonGroup m_group;

m_group_2.addButton(radio1, 0);
m_group_2.addButton(radio2, 1);
m_group_2.addButton(radio3, 2);

// 此时按钮的id分别是0、1、2
QButtonGroup m_group;

m_group_2.addButton(radio1, 2);
m_group_2.addButton(radio2);
m_group_2.addButton(radio3);

// 此时按钮的id分别是2、1、0
QButtonGroup m_group;

m_group_2.addButton(radio2);
m_group_2.addButton(radio3);
m_group_2.addButton(radio1, 2);

// 此时按钮的id分别是-2、-3、2

由上面可以得知:

如果添加按钮时,设置自动id,如果容器内有按钮,那么新添加的按钮的id为: 容器中已存在的按钮的最小id - 1,如果容器内没有按钮,则默认从-2开始。

删除按钮,使用函数removeButton,函数的原型是:

cpp 复制代码
 void QButtonGroup::removeButton(QAbstractButton *button)

button 是你要删除的那个按钮。

按钮id

获取按钮的id,调用id函数,来获取。如果需要重新给按钮设置一个id,调用setId,来给按钮设置一个新的id。两个函数的原型分别为:

cpp 复制代码
  int QButtonGroup::id(QAbstractButton *button) const
    void QButtonGroup::setId(QAbstractButton *button, int id)

获取当前按下的按钮

调用checkButton来获取按钮组容器中,选中的按钮,如果没有按钮选中,则返回nullptr。调用checkedId同时也可以获取当前选中的按钮的id。

cpp 复制代码
int QButtonGroup::checkedId() const
QAbstractButton *QButtonGroup::checkedButton() const

设置QButtonGroup互斥

QButtonGroup默认是互斥的,也就是说,一个按钮组中,在同一时间下,只能有一个按钮被选中。但是,你也可以关闭掉互斥的属性。

cpp 复制代码
setExclusive(bool)   //设置互斥的属性

信号和槽

信号的连接主要是对里面按钮按下时所发射的信号,主要是两类,一类是返回按下的按钮(QAbstractButton*),另一类是返回按下按钮的id

返回按下的按钮

主要是有几个信号:

cpp 复制代码
void QButtonGroup::buttonClicked(QAbstractButton *);
void QButtonGroup::buttonClicked(int );
void QButtonGroup::buttonPressed(QAbstractButton *);
void QButtonGroup::buttonPressed(int);
void QButtonGroup::buttonRelease(QAbstractButton *)
void QButtonGroup::buttonRelease(int)
void QButtonGroup::buttonToggled(QAbstractButton *, bool );
void QButtonGroup::buttonToggled(int, bool );

由于这些信号都是重载的,所以如果想用函数指针来连接,你像下面这样连接:

cpp 复制代码
connect(buttonGroup, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
 [=](QAbstractButton *button){qDebug()<< button->text(); });
 
connect(buttonGroup, QOverload<int>::of(&QButtonGroup::buttonClicked),
 [=](int Id){qDebug()<< Id; });

connect(ButtonGroup, QOverload<int >::of(&QButtonGroup::buttonClicked), this, &MainWindow::onButtonGroupClicked);
相关推荐
charlie11451419112 小时前
现代Qt开发教程(新手篇)2.3——QImage、QPixmap、QIcon 图像处理基础
开发语言·图像处理·qt
AoDeLuo15 小时前
SOEM2.0编译与Qt调用
qt·机器视觉
大树学长16 小时前
【QT开发】Windows 10 + Qt 5.15.2 手动编译安装 Qt OPC UA 模块完整记录
开发语言·windows·qt
小短腿的代码世界17 小时前
Qt低级网络编程与零拷贝技术在高频交易中的应用:从QTcpSocket到共享内存的全链路优化
开发语言·网络·qt
qq_4017004118 小时前
Qt 自定义无边框窗口:标题栏、拖拽移动与缩放
开发语言·qt
xiaoye-duck20 小时前
Qt 信号与槽深度解析:connect 用法、自定义信号槽与 Lambda 实战
开发语言·qt
郝学胜-神的一滴1 天前
Qt 高级开发 008: 使用QSetting记住上次打开路径
开发语言·c++·qt·开源软件
W.W.H.1 天前
Qt 应用防多开:极简单例方案
开发语言·qt·单例模式·共享内存
qq_401700411 天前
Qt 中获取程序路径、用户目录、桌面路径等常用特殊路径
开发语言·qt
LostSpeed1 天前
QT5 - 添加Astyle外部格式化工具
qt·astyle