[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);
[Qt基础-06] QButtonGroup的更多相关文章
- 基于C/S架构的3D对战网络游戏C++框架_04客户端详细设计与OpenGL、Qt基础
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- javaSE基础06
javaSE基础06 一.匿名对象 没有名字的对象,叫做匿名对象. 1.2匿名对象的使用注意点: 1.我们一般不会用匿名对象给属性赋值的,无法获取属性值(现阶段只能设置和拿到一个属性值.只能调用一次方 ...
- javascript基础06
javascript基础06 splice var del_arr = del.splice(0,2); //删除从指定位置deletePos开始的指定数量deleteCount的元素,数组形式返 ...
- Flask基础(06)-->视图常用逻辑
Flask基础(06)-->视图常用逻辑 返回json 重定向:url_for 自定义状态码 返回json:在使用 Flask 写一个接口时候需要给客户端返回 JSON 数据,在 Flask 中 ...
- C/C++ Qt 基础通用组件应用
QT 是一个跨平台C++图形界面开发库,利用QT可以快速开发跨平台窗体应用程序,在QT中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率. 目前,QT开发中常用的基础 ...
- C++ Qt基础知识
时间如流水,只能流去不流回. 学历代表你的过去,能力代表你的现在,学习能力代表你的将来. 学无止境,精益求精. 记录C++ Qt的基础知识学习记录 <C++ Qt设计模式(第二版)>
- qt基础知识之类库概述
qt是用标准c++编写的跨平台开发类库,它对标准c++进行拓展,引入元对象系统.信号&槽.属性等特征 全局定义 容器类及对应迭代器 qt的模块化体系,分为 基本模块和拓展模块,一个模块通常就是 ...
- [Qt基础内容-08] Qt中MVC的M(Model)
Qt中MVC的M(Model)简单介绍 Qt有自己的MVC框架,分别是model(模型).view(视图).delegate(委托),这篇文章,简单的介绍以下Qt中有关model(模型)的类以及一些基 ...
- Qt基础之开发环境部署
将 Qt 5.6 集成至 VS2015 摘要: 由于VS2015不再支持addin,所以要用其他手段. 这里给出64位系统下的安装步骤,32位类似. 一.安装VS2015 过程略.值得注意的是要选择需 ...
- PHP语言基础06 MySql By ACReaper
上篇介绍了如用PHP连接上MySql进行,并进行sql语句的执行.但是我们没有介绍,如何输出处理的结果,如何获得处理的结果. 这里要先说明Mysql有两种查询处理模式,一种是有缓冲的查询处理模式,一种 ...
随机推荐
- 微服务之调用链(Feign+SpringCloud)
终于到了我们的重点,微服务了. 与使用OkHttp3来实现的客户端类似,Feign接口本来也就是一个Http调用,依然可以使用Http头传值的方式,将 Trace 往下传. 本文更多的是关于 Spri ...
- React部署到线上Nginx环境中刷新页面后404解决方案
我们需要在Nginx的配置文件中修改以下内容(通常Nginx配置文件位置为/etc/nginx/nginx.conf): server { # ... location / { # ... # 增加下 ...
- Qt音视频开发33-vlc和mpv打开后鼠标打圈圈问题的解决
一.前言 如果采用的vlc句柄模式,如果鼠标停留在句柄控件中会发现在打开后鼠标打圈圈,mpv句柄模式是在关闭后鼠标打圈圈,这两者真是一前一后,这种给人的体验其实很不友好的,播放开始后或者播放完成后鼠标 ...
- Qt开发经验小技巧236-240
关于在头文件中定义函数使用static关键字的血的教训. 有时候我们需要将一些常用函数写在一个文件中供很多地方调用,如果写的是 int doxxx{} 这种,在你多个地方引用的时候,肯定会编译报错提示 ...
- 在Deepin系统上配置微软Windows远程桌面服务
. 前言 本文主要讲解如何在deepin系统上安装和配置Xrdp远程桌面. Xrdp是微软的远程桌面协议(Remote Desktop Protocol, RDP)的开源版本.在Linux系统上安装X ...
- GeoJSON代码示例
GeoJSON代码示例 1. 读取GeoJSON文件 1.1 实现思路 graph TD A[读取GeoJSON文件] --> B[读取GeoJSON文件内容] B --> C[解析Geo ...
- IDEA配置Maven(详细版)
https://blog.csdn.net/qq_42057154/article/details/106114515 IDEA配置MavenIDEA创建Maven工程第一节 IDEA集成Maven插 ...
- Mysql死锁问题如何排查和解决
Mysql 查询是否存在锁表有多种方式,这里只介绍一种最常用的. 1.查看正在进行中的事务SELECT * FROM information_schema.INNODB_TRX2.查看正在锁的事务SE ...
- 原生input上传视拼,参数形式 file: (binary)形式的
<input type="file" @change="demo"> if(e.target.files[0]&&e.target. ...
- 又来新活了!AI电商搜索,或是下一个90亿美元独角兽?
图源:https://www.shopencore.ai/ 全新体验,大模型驱动的对话式购物搜索. Encore, 由2024年10月成立的美国初创公司开发.定位于二手商品对话式购物搜索,最终目标为个 ...