[Qt编程之Widgets模块] -001: QButtonGroup抽象容器

news2024/12/26 23:05:59

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/507095.html

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

相关文章

免费使用GPT-4.0?【AI聊天 | GPT4教学】 —— 微软 New Bing GPT4 申请与使用保姆级教程

目录 认识 New Bing 2. 注册并登录 Microsoft 账号 3. 如何免科学上网使用 New Bing&#xff1f; 4. 加入 WaitList 候补名单 5. 使用 New Bing&#xff01; 6. 使用 Skype 免科学上网访问 New Bing&#xff01; 7. 在 Chrome 浏览器中使用 New Bing&#xff01; 8. 总…

如何利用splice()和slice()方法操作数组

如何利用splice&#xff08;&#xff09;和slice&#xff08;&#xff09;方法操作数组 前言splice()是什么&#xff0c;有什么用&#xff1f;怎么用&#xff1f;slice()是什么&#xff0c;有什么用&#xff1f;怎么用&#xff1f;splice和slice方法的区别小结 前言 splice&am…

如今的Android就业率惨不忍睹~

3月底公司大裁员&#xff0c;投了一个月简历&#xff0c;一天投个几十份简历&#xff0c;而收到面试通知的就那么三四家&#xff0c;要么就是薪水给得很低不想去&#xff0c;要么就是高薪水的Offer拿不下&#xff0c;而自己中意公司的却没有给出回应,唉……真难啊&#xff01;&…

4.2 线性表顺序表

目录 目录结构 线性表 线性表的特征&#xff1a; 顺序表存储结构的表示 顺序表存储结构的特点 顺序存储结构的表示 线性表的基本运算 基本运算的相关算法 线性表的基本运算 线性表 目录结构 线性表 线性表是包含若干数据元素的一个线性序列 记为&#xff1a; L(a0, …

Istio virtual service 故障注入之延时(fixedDelay)、中断(abort)

Istio 故障注入 Istio 故障注入与其他在网络层引入错误&#xff08;例如延迟数据包或者直接杀死 Pod&#xff09;的机制不同&#xff0c;Istio 允许在应用程序层注入故障。这使得可以注入更多相关的故障&#xff0c;比如 HTTP 错误代码等。 Istio 可以注入两种类型的故障&…

iLO初识

文章目录 什么是iLO&#xff1f;为什么需要iLO&#xff1f;iLO界面介绍风扇状态温度状态存储控制器的电池组件cpu状态内存状态网络设备列表存储状态固件状态 什么是iLO&#xff1f; iLO&#xff08;Integrated Lights-Out&#xff09;是一种远程管理技术&#xff0c;用于管理和…

第7章链接:7.1 编译器驱动程序

示例程序由两个源文件组成&#xff0c;main.c 和 swap.c。 main函数初始化一个两元素的整数数组&#xff0c;然后调用swap函数来交换这一对数。 main.c void swap();int buf[2] {1, 2};int main() {swap();return 0; }swap.c extern int buf[];int *bufp0 &buf[0]; i…

Android系统日志3-trace

1、使用 主要追踪耗时&#xff0c;如上图所示&#xff0c;记录的是traceBegin和traceEnd之间的耗时&#xff0c;这些日志信息可以通过systrace查看 2、获取trace日志 https://developer.android.com/topic/performance/tracing/command-line?hlzh-cn https://developer.andr…

Linux之shell基础(六)

1、shell 简介 shell 介于内核与用户之间&#xff0c;负责命令的编辑&#xff0c;是人机交互的一个桥梁 shell 的种类 [rootyhm ~]# cat /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash /bin/ksh /bin/rksh /usr/bin/ksh /usr/bin/rksh种类说明/bin/shbash的一个…

学习HCIP的day.05

目录 十、ospf扩展配置&#xff1a; 1、认证 2、沉默接口 3、加快收敛 4、缺省路由 查看OSPF路由&#xff1b;显示本地发出和学习到的OSPF路由条目 <r10>display ospf routing 十、ospf扩展配置&#xff1a; 1、认证 直连的邻居或邻接之间&#xff0c;配置身…

【并发编程系列 — 线程基础】

Java并发是Java语言中非常重要的一个话题&#xff0c;也是面试和实际应用中最常接触到的。作为JAVA工程师&#xff0c;掌握并发编程知识是非常重要的。在多核CPU的环境下&#xff0c;使用多线程并发执行任务可以显著提高程序的执行效率&#xff0c;从而提高系统的性能。 目录 …

6.事件系统

事件 事件的传递 新建Widget项目myevent&#xff0c;类名WIdget不变 新建C类如下&#xff1a; 粘贴代码 1myevent运行结果&#xff1a; 输入任意字符时&#xff0c;qDebug显示如下&#xff0c;但框内无法显示输入的字符 //mylineedit.cpp中void MyLineEdit::keyPressEven…

[Docker]Docker命令

Docker常用命令 帮助命令 docker version #版本信息 docker info #详细信息 docker 命令 --help #万能命令镜像命令&#xff1a; docker images #展示所有镜像 docker search docker pull 下载镜像 docker rmi 删除镜像 &#xff08;remove images) 容器命令…

数据分析---Python科学计算库-Numpy学习(一)

一&#xff0c;简介 1.1什么是数据分析 数据分析是指通过使用各种统计学、计算机科学和数学技术&#xff0c;对收集来的数据进行处理、整理、解释和呈现&#xff0c;从而提取出数据中有用的信息和洞察&#xff0c;并帮助做出更明智的决策。数据分析可以应用于各种不同的领域和…

MapReduce源码解读-2

MapReduce源码解读-2 MapReduceInputFormat类getSplitsCreateRecordReader Mapper类OutputCollectorMapOutputBufferPartitioner 分区环形缓冲区 Circular buffer初始化 Spill、Sort溢写、排序Merge 合并combiner 规约 Reduce阶段ReduceTask第一层调用 ReduceTask.run -shuffle…

【力扣】刷题+剑指offer第二版

文章目录 题目收藏不含重复字符的最长子串最长公共子串 剑指 Offer剑指 Offer 05. 替换空格剑指 Offer 03. 数组中重复的数字剑指 Offer 04. 二维数组中的查找剑指 Offer 09. 用两个栈实现队列剑指 Offer 07. 重建二叉树剑指 Offer 06. 从尾到头打印链表剑指 Offer 11. 旋转数组…

【大数据之Hadoop】二十八、生产调优-HDFS集群扩容及缩容

增加或缩减服务器&#xff0c;注意不允许白名单和黑名单同时出现同一个主机。 1 服役新服务器 原有数据节点不能满足数据存储需求时&#xff0c;需要在原有集群的基础上动态增加节点&#xff0c;即动态增加服务器&#xff0c;增加服务器的同时不需要重启集群。 hadoop完全分布…

JVM相关知识点

java内存区域 线程私有的&#xff1a; 程序计数器虚拟机栈本地方法栈 线程共享的&#xff1a; 堆方法区直接内存 程序计数器&#xff1a;记录当前线程执行的位置 当线程切换后能够知道该线程上次运行到哪了 java虚拟机栈&#xff1a; 方法调用的数据通过栈进行传递&#…

一篇文章带你重新回溯单链表的所有

&#x1f349;博客主页&#xff1a;阿博历练记 &#x1f4d7;文章专栏&#xff1a;数据结构与算法 &#x1f69a;代码仓库&#xff1a;阿博编程日记 &#x1f339;欢迎关注&#xff1a;欢迎友友们订阅收藏关注哦 文章目录 &#x1f34c;前言&#x1f4bb;无头单向非循环链表&am…

SSM(Spring、SpringMVC、MyBatis)整合、配置

SpringMVC是一个表述层(前台的页面和后台的servlet)框架&#xff0c;处理浏览器发送到服务器的请求&#xff0c;并且将一些数据响应到浏览器 MyBatis是一个持久层框架&#xff0c;帮助我们连接数据库&#xff0c;访问数据库&#xff0c;操作数据库中的数据 Spring是一个整合型框…