[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有两种查询处理模式,一种是有缓冲的查询处理模式,一种 ...
随机推荐
- Java多线程处理文件详解与代码示例
在Java编程中,文件处理是一项常见的任务.当需要处理大量文件或处理文件的时间较长时,单线程的处理方式可能会显得效率低下.为了提高文件处理的效率,我们可以使用多线程技术.本文将详细介绍如何使用Java ...
- Qt编写地图综合应用11-动态添加
一.前言 在添加设备点或者区域形状的时候,会考虑是直接静态的方式写入到网页中加载,还是动态js函数异步加载的方式,这个需要根据现场的实际需求来,如果只需要一次加载的话建议静态即可,如果运行期间还需要动 ...
- 一篇复杂的研究🤔A Comprehensive Study of 😨Jailbreak Attack versus Defense for Large Language Models
本认为,这篇文章的亮点在于对攻击和防御技术的多维评估,另外通过比较不同模型(如Vicuna.LLama和GPT-3.5 Turbo)对攻击和防御策略的反应,文章提供了对模型间差异的深入理解. 对现有的 ...
- 推荐一个windows系统的下载和安装的网址:win7之家
win7之家:http://www.windows7en.com/ 精校 完整 极致 Windows系统下载仓储站HelloWindows :https://hellowindows.cn/
- SSM或Spring Boot开发中,mapper包中的mapper.xml没有编译到targger中的解决办法
SSM或Spring Boot开发中,mapper包中的mapper.xml没有编译到targger中的解决办法 在pom文件中加入如下配置: <resources> <!-- 编译 ...
- CDS标准视图:设备描述 I_EquipmentText
视图名称: I_EquipmentText 视图类型:基础视图 视图代码: 点击查看代码 @EndUserText.label: 'Equipment - Text' @ObjectModel.dat ...
- c# 判断当前用户是否是管理员权限启动应用程序。
. using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; u ...
- 第二章 dubbo源码解析目录
6.1 如何在spring中自定义xml标签 dubbo自定义了很多xml标签,例如<dubbo:application>,那么这些自定义标签是怎么与spring结合起来的呢?我们先看一个 ...
- Golang-接口7
http://c.biancheng.net/golang/interface/ Go语言接口声明(定义) Go语言不是一种 "传统" 的面向对象编程语言:它里面没有类和继承的概念 ...
- biancheng-Mybatis框架
目录http://c.biancheng.net/mybatis/ 1MyBatis是什么2MyBatis和Hibernate的区别3MyBatis下载4第一个MyBatis程序5MyBatis核心对 ...