【Qt控件之QButtonGroup】概述及使用

news2025/3/13 15:34:50

概述

QButtonGroup 类提供了一个容器来组织一组按钮部件。
QButtonGroup 提供了一个抽象容器,可以将按钮部件放置其中。它不提供此容器的可视表示(请参见 QGroupBox,用于容器部件),而是管理组中每个按钮的状态。
一个互斥按钮组会关闭除被点击的按钮之外的所有可选(切换)按钮。默认情况下,按钮组是互斥的。按钮组中的按钮通常是可选的 QPushButtonQCheckBox(通常用于非互斥按钮组)或 QRadioButton。如果创建了一个互斥按钮组,应确保组中的一个按钮在初始状态下被选中;否则,该组将初始处于没有按钮被选中的状态。
可以使用 addButton() 将按钮添加到组中,并使用 removeButton() 将其移除。如果组是互斥的,则可以使用checkedButton()获得当前选中的按钮。如果按钮被点击,则会发出buttonClicked()信号;对于互斥组中的可选按钮,这意味着按钮已被选中。组中的按钮列表可以通过buttons()返回。
此外,QButtonGroup 还可以在整数和按钮之间进行映射。可以使用 setId() 为按钮分配一个整数 ID,并使用id()获取它。当前选中按钮的 ID 可以使用checkedId()获得,并且有一个重载的 buttonClicked() 信号,它会发出按钮的 ID。ID==-1QButtonGroup保留为“无此按钮”。映射机制的目的是简化在用户界面中表示枚举值的方式。

常用函数

QButtonGroup 类的构造函数、常用函数、枚举值、信号和槽如下:

  1. 构造函数:

    • QButtonGroup(QWidget *parent = nullptr):构造一个按钮组,父部件为定的 parent。
  2. 常用函数:
    - void addButton(QAbstractButton *button, int id = -1):将按钮 button 添加到按钮组中,并可为其指定一个整数 ID。

    • void removeButton(QAbstractButton *button):将按钮 button 从按钮组中移除。
    • QList<QAbstractButton *> buttons() const:返回按钮组中的所有按钮。
    • void setExclusive(bool exclusive):设置按钮组是否为互斥模式。如果 exclusive 为 true,则在组中只有一个按钮可以被选中;如果为 false,则允许多个按钮同时被选中。
    • void setId(QAbstractButton *button, int id):为按钮 button 设置一个整数 ID。
    • int id(QAbstractButton *button) const:返回按钮 button整数 ID。
    • QAbstractButton *button(int id) const:具有指定整数 ID 的按钮。
    • QAbstractButton *checkedButton() const:返回当前被选中的按钮。
    • int checkedId() const:返回当前被选中按钮的整数 ID。
  3. 枚举值:

    • QButtonGroup::ButtonClicked:按钮被点击的信号类型,包含按钮的指针。
  4. 信号:

    • void buttonClicked(QAbstractButton *button):当按钮被点击时发出的信号,传递被点击的按钮的指针。
  5. 槽:

    • void clicked(QAbstractButton *button):当按钮被点击时触发的槽函数。

使用示例

#include <QApplication>
#include <QPushButton>
#include <QButtonGroup>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QButtonGroup buttonGroup;
    
    QPushButton *button1 = new QPushButton("Button 1");
    QPushButton *button2 = new QPushButton("Button 2");
    QPushButton *button3 = new QPushButton("Button 3");

    buttonGroup.addButton(button1, 1);
    buttonGroup.addButton(button2, 2);
    buttonGroup.addButton(button3, 3);

    QObject::connect(&buttonGroup, &QButtonGroup::buttonClicked, [&](QAbstractButton *button) {
        qDebug() << "Button clicked:" << button->text();
        qDebug() << "Button ID:" << buttonGroup.id(button);
    });

    button1->click(); // 模拟点击按钮1

    return app.exec();
}

提示:
如果以上代码信号和槽无法执行,是由于信号重写,可用SIGNALSLOT进行连接。

效果

在这里插入图片描述

在这个示例中,创建了一个按钮组 buttonGroup,并向其中添加了三个 QPushButton 按钮,分别设置了它们的文本和整数 ID。
当按钮被点击时,会触发 buttonClicked 信号,并打印出被点击的按钮的文本和整数 ID。
通过调用 button1->click() 模拟点击了按钮1,从而触发响应的信号和槽函数。

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

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

相关文章

Electron webview 内网页 与 preload、 渲染进程、主进程的常规通信 以及企业级开发终极简化通信方式汇总

Electron 嵌入的页面中注入的是 preload.js 通过在标签中给 prelaod赋值&#xff0c;这里提到了 file://前缀&#xff0c;以及静态目录 static 怎么获取 实际代码&#xff0c;其中__static就是我们存放静态文件的地方&#xff0c;这个 static 是 electron 源代码根目录下的文件…

使用unordered_write调优RocksDB写性能

在使用rocksdb存储的服务中&#xff0c;我们发现QPS在4w/s就怎么调整都上不去了&#xff0c;写性能受到了某种限制。为什么呢&#xff1f;下图描述了rocksdb写入的流程。我们发现 unordered_write true可以提高写入吞吐量。 rocksdb的数据正常写入流程是&#xff0c;多个线程形…

九月 NFT 行业解读:熊市情绪仍占上风

作者: stellafootprint.network 9 月&#xff0c;著名主流媒体《滚石》&#xff08;Rolling Stone&#xff09;发表了一篇题为《你的 NFT 实际上——终于——完全不值钱了》&#xff08;Your NFTs Are Actually — Finally — Totally Worthless&#xff09;的文章&#xff0c…

【网络编程】从网络编程、TCP/IP开始到BIO、NIO入门知识(未完待续...)

目录 前言前置知识一、计算机网络体系结构二、TCP/IP协议族2.1 简介*2.2 TCP/IP网络传输中的数据2.3 地址和端口号2.4 小总结 三、TCP/UDP特性3.1 TCP特性TCP 3次握手TCP 4次挥手TCP头部结构体 3.2 UDP特性 四、总结 课程内容一、网络通信编程基础知识1.1 什么是Socket1.2 长连…

NumPy基础及取值操作

目录 第1关&#xff1a;ndarray对象 相关知识 怎样安装NumPy 什么是ndarray对象 如何实例化ndarray对象 使用array函数实例化ndarray对象 使用zeros&#xff0c;ones&#xff0c;empty函数实例化ndarray对象 代码文件 第2关&#xff1a;形状操作 相关知识 怎样改变n…

液压自动化成套设备比例阀放大器

液压电气成套设备的比例阀放大器是一种电子控制设备&#xff0c;用于控制液压动力系统中的液压比例阀1。 比例阀放大器通常采用电子信号进行控制&#xff0c;以控制比例阀的开度和流量&#xff0c;以实现液压系统的可靠控制。比例阀放大器主要由以下组成部分&#xff1a; 驱动…

tomcat 服务器

tomcat 服务器 tomcat: 是一个开源的web应用服务器。区别nginx&#xff0c;nginx主要处理静态页面&#xff0c;那么动态请求&#xff08;连接数据库&#xff0c;动态页面&#xff09;并不是nginx的长处&#xff0c;动态的请求会交给tomcat进行处理。 nginx-----转发动态请求-…

Golang学习:基础知识篇(三)—— Map(集合)

Golang学习&#xff1a;基础知识篇&#xff08;三&#xff09;—— Map集合 前言什么是Golang&#xff1f;Map集合定义 Map综合实例补充 前言 很久之前就想学Go语言了&#xff0c;但是一直有其他东西要学&#xff0c;因为我学的是Java嘛&#xff0c;所以后面学的东西一直是跟J…

Element-UI 日期选择器--禁用未来日期

在做项目的时候经常会遇到一些报表需要填写日期&#xff0c;一般是填写当日及当日以前&#xff0c;这时候我们的日期选择器就需要进行一些限制&#xff0c;比如&#xff1a; 这样之后&#xff0c;就不会误填写到明天啦&#xff0c;下面让我们看一下代码实现 html页面代码 这里…

Unity ECS最新DOTS环境搭建教程

最近DOTS终于发布了正式的版本, 今天我们来基于Unity 2023.1.6来搭建DOTS 1.0.16的开发环境与注意事项。 对啦&#xff01;这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白&#xff0c;也有一些正在从事游戏开发的技术大佬&#xff0c;欢迎你来交流学习。 1…

Liunx C运算符

一、运算符 &#xff08;一&#xff09;算数运算符 1、float和double不能进行取余操作。 &#xff08;二&#xff09;关系运算符 1、逻辑非 2、逻辑与 例子&#xff1a; if(&#xff08;a-1&#xff09;<b&&b) 如果为真则自增&#xff0c;为假不自增 3、逻辑或 …

leaflet 绘制显示半圆形,扇形示例 (134)

第134个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中绘制显示半圆形,扇形 。这里引用了一个插件,非常方便的绘制扇形和半圆形等。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共77行)安装插件相…

虚拟内存技术的基本概念(局部性原理,特征,实现)

1.传统存储管理方式的特征、缺点 很多暂时用不到的数据也会长期占用内存&#xff0c;导致内存利用率不高。 1.一次性: 作业必须一次性全部装入内存后才能开始运行。 这会造成两个问题: ①作业很大时&#xff0c;不能全部装入内存&#xff0c;导致大作业无法运行; ②当大量作…

node多版本管理器nvm

node多版本管理器nvm 1、为何要使用node版本管理器2、nvm安装步骤2-1、卸载系统中的node2-2、下载nvm2-3、安装 3、维护node版本3-1、安装指定版本node3-2、查看本机已安装的所有node版本3-3、切换本机node版本 1、为何要使用node版本管理器 在日常开发中&#xff0c;难免会遇…

apache log4j漏洞复现

log4j是开源的java存储日志的框架&#xff0c;一般都是大企业用&#xff0c;小企业自带的日志功能足够使用&#xff0c;Log4j2是默认支持解析ldap/rmi协议的&#xff0c;打印的日志中包括ldap/rmi协议都行。 具体介绍参考以下文章&#xff1a; log4j2---基于vulhub的log4j2漏…

Triple协议的隐式参数传递过程

前言 Dubbo 框架的 RPC 调用除了可以传递正常的接口参数外&#xff0c;还支持隐式参数传递。 隐式参数的传递依赖 RpcContext 对象&#xff0c;它持有一个 Map 对象&#xff0c;消费者往 Map 里写入数据&#xff0c;客户端在发起 RPC 调用前会构建 RpcInvocation&#xff0c;然…

linux中如何配置静态ip模式?

对于Linux系统来说&#xff0c;静态IP模式是一种常见的网络配置方式。相比动态IP模式&#xff0c;静态IP模式可以提供更加稳定的网络连接和更好的网络性能。本文将介绍在Linux中如何配置静态IP模式。 一、准备工作 在开始配置之前&#xff0c;需要先做好以下准备工作&#xff1…

Python爬虫基础之Selenium详解

目录 1. Selenium简介2. 为什么使用Selenium&#xff1f;3. Selenium的安装4. Selenium的使用5. Selenium的元素定位6. Selenium的交互7. Chrome handless参考文献 原文地址&#xff1a;https://program-park.top/2023/10/16/reptile_3/ 本文章中所有内容仅供学习交流使用&…

k8s集群授权prometheus(集群外部署)

一、前言 在集群外部prometheus想要调用k8s集群的apiserver获取监控数据需要通过token和ca验证&#xff0c;在集群内部部署的prometheus就不会有这个情况&#xff0c;因为集群内部部署prometheus pod的时候就已经注入了访问集群的token和ca文件&#xff0c;所以以下就针对k8s集…

吴恩达深度学习笔记

B站看的视频&#xff0c;课太长了&#xff0c;180多节&#xff0c;但搬运的没有作业练习&#xff0c;最好找个能练习的 1&#xff0c;假设模型时&#xff0c;以前(2011版机器学习)用西塔代表参数组成的向量&#xff0c;现在用w代表参数组成的向量&#xff0c;b代表西塔0&#x…