【Qt编程之Widgets模块】-001:QButtonGroup抽象容器

news2024/12/24 2:33:58

1.QButtonGroup简介

  • QButtonGroup提供了一个抽象容器,可以将按钮小部件放入其中。它不提供此容器的可视化表示,而是管理组中每个按钮的状态

  • 互斥按钮组,将关闭除已单击的按钮外的所有可选中(可切换)按钮。默认情况下,按钮组是互斥的。按钮组中的按钮通常是可检查的,如QPushButtons、QCheckBoxes(通常用于非互斥按钮组)或QRadioButtons。如果创建互斥按钮组,则应确保最初选中该组中的一个按钮;否则,该组最初将处于未选中按钮的状态。

  • 可以使用addButton()将按钮添加到组中,然后使用removeButton()将其删除。如果组是独占的,则当前选中的按钮可用于checkedButton()。如果单击按钮,则会发出buttonClicked()信号;对于独占组中的可检查按钮,这意味着该按钮已被选中。组中的按钮列表由button()返回。

  • 此外,QButtonGroup可以在整数和按钮之间进行映射。您可以使用setId()为按钮分配一个整数id,并使用id()检索它。当前选中的按钮的id可以通过checkedId()获得,并且有一个重载的信号buttonClicked(),它会发出按钮的id。id值-1为QButtonGroup保留值,表示“没有这样的按钮”。映射机制的目的是简化用户界面中枚举值的表示。

2. 创建QButtonGroup

  • QButtonGroup的构造函数如下:
QButtonGroup(QObject *parent = nullptr);

接收一个对象指针作为其父对象。

3. 成员函数与信号

QButtonGroup常用成员函数有:

函数原型描述
void setExclusive(bool);设置组内按钮是否互斥,不设置默认互斥(true)
bool exclusive() const;获取组内按钮是否互斥的标志,true:互斥,false:不互斥
void addButton(QAbstractButton *, int id = -1);为按钮组添加按钮,为按钮设置id
void removeButton(QAbstractButton *);从组内删除按钮
QList<QAbstractButton*> buttons() const;获取组内所有按钮
QAbstractButton * checkedButton() const;获取按钮组中被选中按钮的指针,如果没有按钮被选中,则返回nullptr
int checkedId() const;获取按钮组中被选中按钮的id,如果没有按钮被选中,则返回-1
QAbstractButton *button(int id) const;通过按钮id索引按钮对象指针
int id(QAbstractButton *button) const;通过按钮对象指针索引按钮id
void setId(QAbstractButton *button, int id);为按钮设置id

QButtonGroup共有8个信号,两两一组共4组:

信号描述
void buttonClicked(QAbstractButton *); void buttonClicked(int);按钮点击信号,按钮组中有按钮被点击发出此信号,并返回被点击的按钮对象指针或id
void buttonPressed(QAbstractButton *);void buttonPressed(int);按钮按下信号,按钮组中有按钮被按下发出此信号,并返回被按下的按钮对象指针或id
void buttonReleased(QAbstractButton *);void buttonReleased(int);按钮释放信号,按钮组中有按钮被释放发出此信号,并返回被释放的按钮对象指针或id
void buttonToggled(QAbstractButton *, bool);void buttonToggled(int, bool);按钮状态改变信号,按钮组中有按钮状态改变发出此信号,并返回状态改变的按钮对象指针/id以及按钮当前状态(点击按钮或程序设置改变按钮状态都会发出此信息号)

4. 示例

4.1. 为按钮组添加按钮

// 创建按钮组对象

QButtonGroup* btnGroup = new QButtonGroup(this);

// 为按钮组添加三个按钮,并设置id(id可以不设置)

btnGroup->addButton(ui->radioButton, 0);
btnGroup->addButton(ui->radioButton_1, 1);
btnGroup->addButton(ui->radioButton_2, 2);

如果不设置id,函数默认传入的值为-1,此时函数为自动为按钮设置id,自动设置的id为负数且从-2开始。

4.2. 为按钮设置id

btnGroup->setId(ui->radioButton, 0);

由于addButton函数的特性,这里设置id不能为-1(-1视为无效值),且建议使用正值。

4.3. 按钮组中按钮的互斥状态

// 获取按钮组中按钮的互斥状态

btnGroup->exclusive();

// 设置按钮组中按钮的互斥状态

btnGroup->setExclusive(false);

如不设置,获取按钮组中按钮的互斥状态默认为true,即同组中所有按钮互斥。

4.4. 获取组内所有按钮

QList<QAbstractButton*> btnList = btnGroup->buttons();

返回所有按钮的对象列表。

4.5. 获取按钮点击信号,并作相应操作

// 连接信号和槽函数

connect(m_btnGroup, SIGNAL(idClicked(int)), this, SLOT(btnClicked(int)));
        
// 槽函数
void btnClicked(int btnId)
{
    switch (btnId)
    {
    case 0:
        qDebug("This is button zreo");
        break;
    case 1:
        qDebug("This is button one");
        break;
    case 2:
        qDebug("This is button two");
        break;
    default:
        break;
    }
}
QT Creator 中操作按钮组方法:

在这里插入图片描述
在这里插入图片描述

    enum HardWareUserRole
    {   
        InValid     =-1,
        Admin       = 0,     // 管理员
        Engineer    = 1,     // 工程师
        User        = 2,     // 操作员
    };
CUserAddDialog::CUserAddDialog(HardWareUser *pInfo, bool bModify, QWidget *parent)
        : m_pInfo(pInfo),
        m_bModify(bModify),
        CBaseDialog(parent)
    {
        ui.setupUi(insertedWidget());
        setTitle(tr("Add user"));
        // 设置窗口固定大小
        setFixedSize(600, 700);
        connect(ui.m_pBtnSave, SIGNAL(clicked()), this, SLOT(onSave()));
        // 设置正则表达式.
        ui.m_pLineEditUser->setValidator(new QRegExpValidator(QRegExp("[a-zA-Z0-9]{1,16}")));
        ui.m_pLineEditPwd->setValidator(new QRegExpValidator(QRegExp("[a-zA-Z0-9]{1,16}")));
        // 限制输入lineEdit中最多只能输入5个字符
        ui.m_pLineEditName->setMaxLength(6);
        // 按钮为不可点击
        ui.m_pRadioBtnAdmin->setEnabled(false);

		// 设置按钮组中按钮的id
        ui.buttonGroup->setId(ui.m_pRadioBtnOper, User);
        ui.buttonGroup->setId(ui.m_pRadioBtnEngineer, Engineer);
        ui.buttonGroup->setId(ui.m_pRadioBtnAdmin, Admin);
        initial();
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/514875.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

七个合法学习黑客技术的网站,让你从萌新成为大佬

合法的学习网站&#xff0c;以下这些网站&#xff0c;虽说不上全方位的满足你的需求&#xff0c;但是大部分也都能。能带你了解到黑客有关的技术&#xff0c;视频&#xff0c;电子书&#xff0c;实践&#xff0c;工具&#xff0c;数据库等等相关学习内容。以上这些网站我都是用…

项目调研 | Loopring研究报告

一、项目简介及愿景 Loopring协议是一个专为应用程序开发的 zkRollup 协议、一个中继器、一个 L2 非托管交易所、一个智能钱包。用户可以在其中使用、交易和存储资产&#xff0c;同时让资产获得增长。 上述Loopring这些Title具体详情如下&#xff1a; 作为协议&#xff0c;Loop…

latex论文写作实用工具

从pdf定位到latex&#xff1a;ctrl 鼠标左键从latex定位到pdf&#xff1a;ctrl alt jVscode写latex时如何自动换行 最简单的方法就是使用快捷 Alt z 公式识别 SiimpleTex latex格式化 下载链接 在VSCode用户Json文件中添加如下&#xff1a; 表格转换工具 链接 Excel…

YOLOv5改进系列(3)——添加CA注意力机制

【YOLOv5改进系列】前期回顾&#xff1a; YOLOv5改进系列&#xff08;0&#xff09;——重要性能指标与训练结果评价及分析 YOLOv5改进系列&#xff08;1&#xff09;——添加SE注意力机制 YOLOv5改进系列&#xff08;2&#xff09;——添加CBAM注意力机制 目录 &#x1f68…

【Linux】Redis高可用概述1(RDB和AOF的备份恢复)

在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务 &#xff08;99.9%、99.99%、99.999% 等等&#xff09;。 但是在Redis语境中&#xff0c;高可用的含义似乎要宽泛一些&#xff0c;除了保证提供正常服 务(如…

优惠卷秒杀——分布式锁

在集群的模式下&#xff0c;有多个jvm&#xff0c;每个jvm内部有他自己的锁&#xff0c;导致并行执行存在线程安全问题 分布式锁&#xff1a;满足分布式系统或集群模式下多线程可见并且互斥的锁 基于Redis实现分布式锁 基于redis锁的初级版本 public interface ILock {/*** …

第十四届蓝桥杯C++--A组题解(更新中)

本来考场上做完想着这回图一乐&#xff0c;打打暴力混个省奖得了&#xff0c;看完民间题解感觉跟自己估计的差不多&#xff0c;应该挺寄的&#xff0c;没想到出分捡了个省一&#xff0c;喜提弱省省一倒数 这篇博客把自己会的题先放上来&#xff0c;其他的题慢慢补&#xff0c;好…

干翻Mybatis源码系列之第八篇:Mybatis提供的缓存方案细节注意

前言 Mybatis缓存设计成了两层的体系&#xff0c;第一层叫做一级缓存&#xff0c;第二层叫做二级缓存&#xff08;全局缓存&#xff09;。我们从这里可以看到Mybatis的缓存方案是有两种处理方式的。 一级缓存&#xff08;默认开启&#xff09; 一级缓存默认开启的&#xff0c…

[天翼杯 2021]esay_eval

[天翼杯 2021]esay_eval <?php class A{ #定义一个名为A的类public $code ""; #定义一个公共属性code function __call($method,$args){ #call魔术方法 当调用一个不存在的成员方法的时候触发eval($this->code); #将code的值以php代码执行 }function __w…

c高级day3作业

#!/bin/bash # 脚本名称:myfirstshell echo hello hostname ls -a .. echo $PATH echo $HOME df -h id -g hostname echo goodbye #!/bin/bash a(ls -l /etc | grep "^-" ) #/etc文件中普通文件 b(ls -l /etc | grep "^d" ) #/etc文件中一级目录文件 …

一篇了解智慧网关

智慧网关是指基于互联网技术的智能网关&#xff0c;能够连接不同的物联网设备和传感器&#xff0c;实现数据采集、信息传递、远程控制、通信管理等功能。作为物联网架构中的核心设备之一&#xff0c;智慧网关在智能家居、智慧城市、智能制造、智能交通、智能农业等领域得到了广…

solidworks三维建模竞赛练习题

solidworks三维建模竞赛练习题&#xff1a;3D01‐ 01 solidworks三维建模竞赛练习题&#xff1a;3D01‐ 02 solidworks三维建模竞赛练习题&#xff1a;3D01‐ 03 solidworks三维建模竞赛练习题&#xff1a;3D01‐ 04 solidworks三维建模竞赛练习题&#xff1a;3D01‐ 05 solidw…

windows docker 创建mysql主从 容器创建mysql主从

1. docker命令新建mysql-master&#xff0c;只是简单测试&#xff0c;没有设置映射&#xff0c;只是验证主从连接&#xff0c;需要可自行添加 docker run --restartalways --name mysql-master --privilegedtrue -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 mysql:8.0 2.…

Linux - 第11节 - 网络入门

目录 1.计算机网络背景 1.1.网络发展 1.2.认识 "协议" 2.网络协议初识 2.1.协议分层 2.2.OSI七层模型 2.3.TCP/IP五层&#xff08;或四层&#xff09;模型 3.网络传输基本流程 3.1.同局域网的两台主机通信 3.2.跨网络的两台主机通信 1.计算机网络背景 1.1…

spring事务报错Transaction rolled back because it has been marked as rollback-only

之前经常报"Transaction rolled back because it has been marked as rollback-only"这个异常 字面意思是"事务回滚了&#xff0c;因为它被标记了必须回滚"&#xff0c;最开始完全不懂事务的嵌套&#xff0c;每次出现这个错误都想知道为什么&#xff0c;但…

套接字类型和协议设置

创建套接字 成功返回文件描述符&#xff0c;失败返回-1 int socket (int __domain, int __type, int __protocol) ;__domain&#xff1a;套接字中使用的协议族信息 一般使用PF_INET&#xff08;IPv4互联网协议族&#xff09;&#xff0c;其它协议族不常使用或尚未普及。另外&a…

算法设计与分析:大整数的加减乘除运算

目录 任务描述 相关知识 大整数的思想 大整数加法 大整数减法 大整数与整数的乘法 大整数乘法 大整数与整数的除法 n的阶乘求解思路 编程要求 测试说明 任务描述 本关任务&#xff1a;掌握大整数的基本思想&#xff0c;并运用大整数的基本运算计算出常规整数n的阶乘…

seaweedfs服务启动参数及翻译(seaweed参数、seaweed命令、weed参数、weed命令)(在单个容器同时启动master、volume、filer服务)

文章目录 weed命令翻译weed server命令翻译 weed filer命令 docker容器运行示例&#xff08;docker run命令&#xff09;以下是一个在单个容器启动master、volume、filer服务的示例 weed server 容器debug 版本&#xff1a;3.47从官方镜像docker容器里扒下来的&#xff0c;只扒…

【多线程】单例模式

目录 饿汉模式 懒汉模式-单线程版 懒汉模式-多线程版 懒汉模式-多线程版(改进) 单例是一种设计模式。 啥是设计模式 ? 设计模式好比象棋中的 " 棋谱 ". 红方当头炮 , 黑方马来跳 . 针对红方的一些走法 , 黑方应招的时候有一些固定的套路. 按照套路来走局势…

5.11 C高级作业

编写一个名为myfirstshell.sh的脚本&#xff0c;它包括以下内容。 1、包含一段注释&#xff0c;列出您的姓名、脚本的名称和编写这个脚本的目的 2、和当前用户说“hello 用户名” 3、显示您的机器名 hostname 4、显示上一级目录中的所有文件的列表 5、显示变量PATH和HOME的…