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);
相关推荐
Larry_Yanan32 分钟前
Qt网络开发之基于 QWebEngine 实现简易内嵌浏览器
linux·开发语言·网络·c++·笔记·qt·学习
一然明月3 小时前
Qt QML 锚定(Anchors)全解析
java·数据库·qt
一只爱学习的小鱼儿3 小时前
使用QT编写粒子显示热力图效果
开发语言·qt
大树学长3 小时前
【QT开发】Redis通信相关(一)
redis·qt
笨笨马甲3 小时前
Qt 人脸识别
开发语言·qt
山上三树4 小时前
Qt QObject介绍
开发语言·qt
山上三树4 小时前
QObject、QWidget、Widget三者的关系
qt
坚定学代码4 小时前
qt c++ 局域网聊天小工具
c++·qt·个人开发
笨笨马甲5 小时前
Qt network开发
开发语言·qt
mengzhi啊1 天前
Qt Designer UI 界面 拖的两个 QLineEdit,想按 Tab 从第一个跳到第二个
qt