[Qt基础-06] QButtonGroup
QButtonGroup
本文主要根据QT官方帮助文档以及日常使用,简单的介绍一下QButtonGroup的功能以及基本使用
文章目录#
简介#
有的时候,我们会创建很多按钮,例如创建3个QPushButton,但是这三个按钮对应的功能比较相似,正常的情况下,我们会绑定三个信号和槽,但是这样就有很多多余的代码,在这种情况下,我们可以使用QButtonGroup来,将按钮加到容器里,统一进行管理。
根据QT帮助文档中的描述,QButtonGroup是一个容纳QAbstractButton的一个容器,这个容器不像QGroupBox一样提供可视化的显示,其主要功能是对按钮的管理。
QButtonGroup默认是互斥的,也就是说,添加到这个容器里面的按钮,默认情况下,只能有一个按钮是checked的;既然是容器,那就有添加和删除,即addButton和removeButton。同样的,也有获取里面的元素即buttons。
关联信号buttonClicked、buttonPressed和buttonToggled,来执行不同按钮按下时,对应的不同操作。
-
添加和删除按钮
添加按钮,使用函数addButton,这个函数的原型是:
void QButtonGroup::addButton(QAbstractButton *button, int id = -1);
button 这个参数的代表你要添加的按钮,而后面的 id则是你要添加的按钮的序号,如果id等于-1,根据容器里按钮的id来自动的给按钮添加一个id。自动添加的id,默认会从-2开始。
QButtonGroup m_group; m_group_2.addButton(ui->radioButton); m_group_2.addButton(ui->radioButton_2); m_group_2.addButton(ui->radioButton_3); // 此时按钮的id分别是-2、-3、-4
QButtonGroup m_group; m_group_2.addButton(ui->radioButton, 0); m_group_2.addButton(ui->radioButton_2, 1); m_group_2.addButton(ui->radioButton_3, 2); // 此时按钮的id分别是0、1、2
QButtonGroup m_group; m_group_2.addButton(ui->radioButton, 2); m_group_2.addButton(ui->radioButton_2); m_group_2.addButton(ui->radioButton_3); // 此时按钮的id分别是2、1、0
QButtonGroup m_group; m_group_2.addButton(ui->radioButton_2); m_group_2.addButton(ui->radioButton_3); m_group_2.addButton(ui->radioButton, 2); // 此时按钮的id分别是-2、-3、2
由上面可以得知:
如果添加按钮时,设置自动id,如果容器内有按钮,那么新添加的按钮的id为: 容器中已存在的按钮的最小id - 1,如果容器内没有按钮,则默认从-2开始。
删除按钮,使用函数removeButton,函数的原型是:
void QButtonGroup::removeButton(QAbstractButton *button)
button 是你要删除的那个按钮。
-
按钮的id
获取按钮的id,调用id函数,来获取。如果需要重新给按钮设置一个id,调用setId,来给按钮设置一个新的id。两个函数的原型分别为:
int QButtonGroup::id(QAbstractButton *button) const void QButtonGroup::setId(QAbstractButton *button, int id)
-
获取当前按下的按钮
调用checkButton来获取按钮组容器中,选中的按钮,如果没有按钮选中,则返回nullptr。调用checkedId同时也可以获取当前选中的按钮的id。
int QButtonGroup::checkedId() const QAbstractButton *QButtonGroup::checkedButton() const
-
设置QButtonGroup互斥
QButtonGroup默认是互斥的,也就是说,一个按钮组中,在同一时间下,只能有一个按钮被选中。但是,你也可以关闭掉互斥的属性。
调用setExclusive来设置互斥的属性
信号和槽#
信号的连接主要是对里面按钮按下时所发射的信号,主要是两类,一类是返回按下的按钮(QAbstractButton*),另一类是返回按下按钮的id
-
返回按下的按钮
主要是有几个信号:
void QButtonGroup::buttonClicked(QAbstractButton *button); void QButtonGroup::buttonPressed(QAbstractButton *button); void QButtonGroup::buttonRelease(QAbstractButton *button) void QButtonGroup::buttonToggled(QAbstractButton *button, bool checked);
由于这些信号都是重载的,所以如果想用函数指针来连接,你像下面这样连接:
connect(buttonGroup, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked), [=](QAbstractButton *button){ /* ... */ });
-
返回按下按钮的id
和上面类似,主要也是几个信号:
void QButtonGroup::idClicked(int id); void QButtonGroup::idPressed(int id); void QButtonGroup::idRelease(int id) void QButtonGroup::idToggled(int id, bool checked);
作者:师从名剑山
出处:https://www.cnblogs.com/codegb/p/16653437.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析