QT C++ QButtonGroup应用

news2024/10/7 16:26:50

//QT 中,按钮数量比较少,可以分别用各按钮的信号和槽处理。

//当按钮数量较多时,用QButtonGroup可以实现共用一个槽函数批量处理,减少垃圾代码,

//减少出错。

//开发平台:win10+QT6.2.4 MSVC2019 64 bit

//1.画面

//2.头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QButtonGroup>
#include <QList>
#include <QTimer>

QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
    void initGroupBoxPLCOutButton();
    QButtonGroup * btnGroup=nullptr;
    QTimer *timer2=nullptr;
    void DispButtons();
private slots:
    void OnButtonGroup(QAbstractButton *button, bool checked);
    void loop2();

};
#endif // WIDGET_H
 

//3. cpp文件

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    initGroupBoxPLCOutButton();
    timer2=new QTimer(this);
    connect(timer2, SIGNAL(timeout()), this, SLOT(loop2())); // SLOT填入一个槽函数
    timer2->start(100); // 100毫秒, 等于 1 秒
}

Widget::~Widget()
{
    delete ui;
}
void Widget::initGroupBoxPLCOutButton()
{
    btnGroup=new QButtonGroup(this);
    btnGroup->addButton(ui->bt_Y00,0);
    btnGroup->addButton(ui->bt_Y01,1);
    btnGroup->addButton(ui->bt_Y02,2);
    btnGroup->setExclusive(false);
    QString  color_off="background-color: rgb(150, 150, 150)";
    QList buttonList = btnGroup->buttons();
    for (int i = 0; i < buttonList.count(); i++) {
        QAbstractButton *button = buttonList.at(i);
        button->setCheckable(true);
        button->setStyleSheet(color_off);
        button->setFixedSize(30, 30);
        button->setText("");
    }
    connect(btnGroup, SIGNAL(buttonToggled(QAbstractButton *, bool)), this, SLOT(OnButtonGroup(QAbstractButton *, bool)));
}

void Widget::OnButtonGroup(QAbstractButton *button, bool checked)
{
    //qDebug() << "OnButtonGroup";
    unsigned int out=0;
    unsigned int temp =1;
    if(button != NULL)
    {
        qDebug() << button->objectName();
        qDebug() << checked;
        QString str;
        QList buttonList = btnGroup->buttons();
        for (int i = 0; i < buttonList.count(); i++)
        {
            QAbstractButton *bt = buttonList.at(i);
            if (bt->isChecked())
            {
                out=out | temp;
            }
            temp*=2;
            if(bt==button)
            {
                str="输出点";
                str+=QString::number(i);
                str+="=";
                str+=checked?"on":"off";
            }
        }
        qDebug()<<str;
    }
}
void Widget::loop2()
{
    DispButtons();
}
void Widget::DispButtons()//显示按钮不同状态的颜色
{
    QList buttonList = btnGroup->buttons();
    QString  color_on="background-color: rgb(0, 255, 0)";//按下,绿
    QString  color_off="background-color: rgb(111, 111, 111)";//未按下
    for (int i = 0; i < buttonList.count(); i++)
    {
        QAbstractButton *button = buttonList.at(i);
        if (button->isChecked())
            button->setStyleSheet(color_on);
        else
            button->setStyleSheet(color_off);
    }
}

//4.代码下载链接:

https://download.csdn.net/download/weixin_39926429/88975226

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

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

相关文章

面向控制台编程?Java的GUI开发

记得之前刚开始学习Java&#xff0c;按部就班去阅读《Java核心技术》这本书的时候&#xff0c;总是听别人提起&#xff0c;java swing那一章不用看了。然后直到对着控制台编程了半年&#xff0c;回来捡起了Swing图形界面&#xff0c;跟着网上搞了坦克大战的游戏&#xff0c;总觉…

【蓝桥杯选拔赛真题38】C++判断数字 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解析

目录 C判断数字 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 C判断数字 第十四届蓝桥杯青少年创意编程大赛C选拔赛真题 一、题目要求 1、编程实现 给定一个正整数N(100≤N<100000)…

从零开始搭建游戏服务器 第二节 Actor模型与应用

目录 复习本节内容正文什么是Actor模型如何应用创建Actor基类创建RootActor创建AkkaContext创建ConnectActorManager和ConnectActor生成actor并发送消息给它 课后作业结尾 复习 上一节我们使用gradle构建了一个多模块系统。 并且在登录服启动了Netty服务&#xff0c;监听confi…

字符串的模式匹配算法

一、朴素模式匹配算法 二、KMP算法 三、KMP求Next数组 四、KMP求NextVal数组

Nacos与Eureka的使用与区别

Nacos与Eureka的使用与区别 单体架构&#xff1a;优点缺点 分布式架构需要考虑的问题&#xff1a;微服务企业需求 认识SpringCloud服务的拆分与远程调用微服务调用方式 Eureka提供者和消费者架构搭建Eureka服务注册服务发现 Ribbon负载均衡饥饿加载总结 Nacos注册中心Nacos安装…

Task-balanced distillation for object detection用于

Task-balanced distillation for object detection用于目标检测的任务平衡蒸馏 摘要 主流的目标检测器通常由分类和回归两个子任务组成&#xff0c;由两个并行头部实现。这种经典的设计范式不可避免的导致分类得分和定位质量&#xff08;IOU&#xff09;之间的空间分布不一致…

鸿蒙开发实现弹幕功能

鸿蒙开发实现弹幕功能如下&#xff1a; 弹幕轮播组件&#xff1a;BannerScroll import type { IDanMuInfoList, IDanMuInfoItem } from ../model/DanMuData //定义组件 Component export default struct BannerScroll {//Watch 用来监视状态数据的变化&#xff0c;包括&#…

软考79-上午题-【面向对象技术3-设计模式】-结构型设计模式02

一、组合模式 1-1、意图 将对象组合成树型结构&#xff0c;以表示"部分-整体"的层次结构。Composite使得用户对单个对象和组 合对象的使用具有一致性。 示例&#xff1a;对象&#xff1a;文件、文件夹 1-2、结构 Component 为组合中的对象声明接口&#xff1b;在适…

CKA认证之Etcd备份与恢复

题目介绍&#xff1a; 资料参考&#xff1a; https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/configure-upgrade-etcd 解题&#xff1a; 1、备份 #参考模板列出 etcdctl 可用的各种选项。 #例如&#xff0c;你可以通过指定端点、证书和密钥来制作快照&#xff0…

Android 开发 地图 polygon 显示信息

问题 Android 开发 地图 polygon 显示信息 详细问题 笔者进行Android项目开发&#xff0c;接入高德地图绘制区域后&#xff0c;需要在指定区域&#xff08;位置&#xff09;内显示文本信息&#xff0c;如何实现 实现效果 解决方案 代码 import com.amap.api.maps.model.T…

Day47-http和www基础2

Day47-http和www基础2 1.Linux下实践观察HTTP协议通信过程1.1 DNS解析过程1.2 tcp三次握手1.3 发起HTTP请求报文阶段1.4 请求报文阶段1.5 响应报文部分1.6 分析URL&#xff0c;DNS解析1.7 HTTPS连接建立的过程1.8 请求报文阶段1.8.1 referer1.8.2 如何解决防盗链&#xff1f; 2…

【机器学习】分类模型的评价方法

&#x1f33b;个人主页&#xff1a;相洋同学 &#x1f947;学习在于行动、总结和坚持&#xff0c;共勉&#xff01; #学习笔记# 目录 一、混淆矩阵&#xff08;Confusion Matrix&#xff09; 二、评估指标&#xff08;Evaluation metrics&#xff09; 1.正确率(accuracy) …

HCIP—OSPF课后练习一

本实验模拟了一个企业网络场景&#xff0c;R1、R2、R3为公司总部网络的路由器&#xff0c;R4、R5分别为企业分支机构1和分支机构2的路由器&#xff0c;并且都采用双上行方式与企业总部相连。整个网络都运行OSPF协议&#xff0c;R1、R2、R3之间的链路位于区域0&#xff0c;R4与R…

数据分析-Pandas的直接用Matplotlib绘图

数据分析-Pandas的直接用Matplotlib绘图 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表…

Swift 面试题及答案整理,最新面试题

Swift 中如何实现单例模式&#xff1f; 在Swift中&#xff0c;单例模式的实现通常采用静态属性和私有初始化方法来确保一个类仅有一个实例。具体做法是&#xff1a;定义一个静态属性来存储这个单例实例&#xff0c;然后将类的初始化方法设为私有&#xff0c;以阻止外部通过构造…

[java基础揉碎]多态参数

多态参数 方法定义的形参类型为父类类型&#xff0c;实参类型允许为子类类型 例子: 定义一个员工类, 有名字和工资两个属性, 有年工资的方法 定义一个普通员工继承了员工类 , 重写了年工资的方法 定义一个经理类, 也继承了员工类, 同时经理多以了一个奖金的属性, 重写的年…

Ubuntu 如何安装 Beyond Compare?

Ubuntu20.04安装Beyond Compare 4.3.7 一、官网下载方式一&#xff1a;方法二&#xff1a;使用 .deb 包安装 二、安装相关依赖和bcompare三、破解常见错误解决方法 ) 文件比较工具Beyond Compare是一套由Scooter Software推出的文件比较工具。主要用途是对比两个文件夹或者文件…

JUnit 面试题及答案整理,最新面试题

JUnit中的断言&#xff08;Assert&#xff09;有哪些类型&#xff1f; JUnit提供了多种断言类型来帮助测试代码的正确性。常见的断言类型包括&#xff1a; 1、assertEquals&#xff1a; 用于检查两个值是否相等。如果不相等&#xff0c;测试失败。 2、assertTrue和assertFal…

监控系统prometheus+grafana+发送告警信息

1、基础环境准备两台或更多的主机 2、关闭selinux vi /etc/selinux/config&#xff0c;修改SELINUX的值为disabled 3、关闭防火墙 systemctl disable firewalld systemctl stop firewalld 4、prometheus官网下载 https://prometheus.io/download/ 5、grafana官网下载 https…

HTML语法基础

1.HTML是什么 HTML是超文本标记语言&#xff0c;标准通用标记语言下的一个应用。 “超文本”就是指页面内可以包含图片、链接&#xff0c;甚至音乐、程序等非文字元素。 超文本标记语言的结构包括“头”部分&#xff08;英语&#xff1a;Head&#xff09;、和“主体”部分&…