QT自定义带参数信号与槽函数

        我的软件界面是这样的,点击图标按钮后进入子项的参数配置。

        由于按钮众多,每个按钮都有点击事件,一个个去写是在太多麻烦,而且我的这个配置软件各个子项的参数配置页面基本是差不多的,只是传递的参数有差异而已。

        通过自定义一个信号,用于传递按钮按下事件,同时传递被点击按钮的行列号,便于后续处理。

        首先是头文件,用于实现布局及定义信号及槽函数。在这里我们自定义一个信号void port_clicked(int col,int row)以及对应的槽函数void port_setting(int col,int row),其它的则是软件布局涉及到的一些控件。

class mainWidget : public QWidget
{
    Q_OBJECT

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

signals:
    void port_clicked(int col,int row);
private:

    QGroupBox *groupBox;
    QGridLayout *gridLayout;
    QPushButton      *portbtn[28][8];
    QLabel      *titlelabel[4];
    QLabel      *subHtitlelabel[28];
    QLabel      *subVtitlelabel[8];

private slots:
    void port_setting(int col,int row);
};

        接下来是cpp文件,首先是创建一个widget,然后在widget里又放了一个groupbox用于放置按钮。按钮使用grid布局后,添加标签字符。然后在布局时用到的循环里发送信号,将各个按钮的点击汇总为port_clicked(int col,int row),再使用connet绑定该信号与槽函数,接下来就可以在port_setting(int col,int row)里统一处理了。

mainWidget::mainWidget(QWidget *parent)
    : QWidget(parent)
{
    this->setGeometry(200,100,1440,810);

    groupBox=new QGroupBox(this);
    groupBox->setGeometry(100,100,1200,600);
    gridLayout=new QGridLayout(this->groupBox);

    QList <QString>list;
    list<<"CON.OUT"<<"NET.OUT"<<"CON.IN"<<"NET.IN";
    QFont ft;
    ft.setPointSize(18);
    for (int i=0;i<4;i++)
    {
        titlelabel[i]=new QLabel(this);
        titlelabel[i]->setText(list[i]);
        titlelabel[i]->setFont(ft);
    }
    titlelabel[0]->setGeometry(400,70,120,20);
    titlelabel[1]->setGeometry(980,70,120,20);
    titlelabel[2]->setGeometry(20,310,120,20);
    titlelabel[3]->setGeometry(20,600,120,20);

    QFont subft;
    subft.setPointSize(18);
    QList <QString>subVlist;
    subVlist<<"1"<<"2"<<"3"<<"4"<<"5"<<"6"<<"1"<<"2";
    QList <QString>subHlist;
    subHlist<<"1"<<"2"<<"3"<<"4"<<"5"<<"6"<<"7"<<"8"<<"9"<<"10"<<"11"<<"12"<<"13"<<"14"<<"15"<<"16"
              <<"1"<<"2"<<"3"<<"4"<<"5"<<"6"<<"7"<<"8"<<"9"<<"10"<<"11"<<"12";
    for (int col=0;col<28;col++)
    {
        for (int row=0;row<8;row++)
        {
            portbtn[col][row]=new QPushButton(this->groupBox);
            portbtn[col][row]->setFlat(true);
            portbtn[col][row]->setIconSize(QSize(24,24));
            if(row<6&&col<16)
                portbtn[col][row]->setIcon(QPixmap(":/image/portB.png"));
            else if(row<8&&col<16)
                portbtn[col][row]->setIcon(QPixmap(":/image/portR.png"));
            else if(col<28&&row<6)
                portbtn[col][row]->setIcon(QPixmap(":/image/portG.png"));
            else
                portbtn[col][row]->setIcon(QPixmap(":/image/portH.png"));

            gridLayout->addWidget(portbtn[col][row],row,col);
            gridLayout->setRowStretch(row,1);
            if(col==0)
            {
                subVtitlelabel[row]=new QLabel(this);
                subVtitlelabel[row]->setText(subVlist[row]);
                subVtitlelabel[row]->setFont(subft);
                subVtitlelabel[row]->setGeometry(100,145+69*row,20,20);
            }
            if(row==0)
            {
                subHtitlelabel[col]=new QLabel(this);
                subHtitlelabel[col]->setText(subHlist[col]);
                subHtitlelabel[col]->setFont(subft);
                subHtitlelabel[col]->setAlignment(Qt::AlignVCenter);
                subHtitlelabel[col]->setGeometry(120+42*col,120,36,20);
            }
            connect(portbtn[col][row], &QPushButton::clicked, this,[=]()
            {
                emit port_clicked(col,row);
            });
        }

        gridLayout->setColumnStretch(col,1);
    }
    groupBox->setLayout(gridLayout);
    connect(this, SIGNAL(port_clicked(int,int)), this, SLOT(port_setting(int,int)));
}

mainWidget::~mainWidget()
{

}

void mainWidget::port_setting(int col,int row)
{
    portbtn[col][row]->setVisible(false);
}

        我这里测试用了setVisible函数,可以看到被点击的按钮都消失了,证明功能有效。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PHP+MySQL开发组合:多端多商户DIY商城源码系统 带完整的搭建教程以及安装代码包

近年来&#xff0c;电商行业的迅猛发展&#xff0c;越来越多的商户开始寻求搭建自己的在线商城。然而&#xff0c;传统的商城系统往往功能单一&#xff0c;无法满足商户个性化、多样化的需求。同时&#xff0c;搭建一个功能完善的商城系统需要专业的技术团队和大量的时间成本&a…

【FPGA】摄像头模块OV5640

本篇文章包含的内容 一、OV5640简介1.1 基本概述1.2 工作时序1.2.1 DVP Timing&#xff08;数据传输时序&#xff09;1.2.2 帧曝光工作模式 1.3 OV5640 闪光灯工作模式1.3.1 Xenon Flash&#xff08;氙灯闪烁&#xff09;模式1.3.2 LED 1&2 模式1.3.3 LED 3模式1.3.4 手动开…

【ESP32接入国产大模型之MiniMax】

1. MiniMax 讲解视频&#xff1a; ESP32接入语言大模型之MiniMax MM智能助理是一款由MiniMax自研的&#xff0c;没有调用其他产品的接口的大型语言模型。MiniMax是一家中国科技公司&#xff0c;一直致力于进行大模型相关的研究。 随着人工智能技术的不断发展&#xff0c;自然语…

Python入门(小白友好)

知识图谱 搭建环境 安装Python:Download Python | Python.org 安装PyCharm:Download PyCharm: The Python IDE for data science and web development by JetBrains 注意:专业版本是收费的,新手小白使用社区版(community)即可 创建第一个项目: 一些PyCharm的设置(也适用…

Springboot和Spring Cloud版本对应

Spring在不断地升级&#xff0c;各个版本存在一些不兼容的地方&#xff0c;为了避免出现问题&#xff0c;最好注意使用正确的版本。 官网的对应关系&#xff1a;https://start.spring.io/actuator/info 如下图&#xff1a; 下面附一下创建项目的工具&#xff1a; Spring官方…

ClickHouse--13--springboot+mybatis配置clickhouse

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 ClickHouse1.添加maven依赖2.配属数据源3.参数配置4.Druid连接池配置5.entity6.Mapper接口7.Mapper.xml8.controller接口9.创建一个clickhouse表10.测试 ClickHouse…

【复现】【免费】基于多时间尺度滚动优化的多能源微网双层调度模型

目录 主要内容 部分代码 结果一览 1.原文结果 2.程序运行结果 下载链接 主要内容 该模型参考《Collaborative Autonomous Optimization of Interconnected Multi-Energy Systems with Two-Stage Transactive Control Framework》&#xff0c;主要解决的是一个多…

springboot校服订购系统

摘 要 本文首先实现了校服订购系统设计与实现管理技术的发展随后依照传统的软件开发流程&#xff0c;最先为系统挑选适用的言语和软件开发平台&#xff0c;依据需求分析开展控制模块制做和数据库查询构造设计&#xff0c;随后依据系统整体功能模块的设计&#xff0c;制作系统的…

阿里云发布 AI 编程助手 “通义灵码”——VSCode更强了 !!

文章目录 什么是 通义灵码&#xff08;TONGYI Lingma&#xff09; 快速体验“通义灵码” 什么是“通义灵码”&#xff08;TONGYI Lingma&#xff09; 通义灵码&#xff08;TONGYI Lingma&#xff09;&#xff0c;是阿里云出品的一款基于通义大模型的智能编码辅助工具&#xff…

考研失败, 学点Java打小工_Day3_卫语句_循环

1 编码规范——卫语句 表达异常分支时&#xff0c;少用if-else方式。   比如成绩判断中对于非法输入的处理&#xff1a; /*>90 <100 优秀>80 <90 良好>70 <80 一般>60 <70 及格<60 不及格*/Testpu…

阿里云2核4G4M轻量应用服务器价格165元一年

阿里云优惠活动&#xff0c;2核4G4M轻量应用服务器价格165元一年&#xff0c;4Mbps带宽下载速度峰值可达512KB/秒&#xff0c;系统盘是60GB高效云盘&#xff0c;不限制月流量&#xff0c;2核2G3M带宽轻量服务器一年87元12个月&#xff0c;在阿里云CLUB中心查看 aliyun.club 当前…

[QJS xmake] 非常简单地在Windows下编译QuickJS!

文章目录 前言准备C编译器xmake编译包 工程准备修改版本号第一遍编译第二遍编译效果 前言 quickjs是个很厉害的东西啊&#xff0c;我一直想编译一下的&#xff0c;奈何一直没成功。现在找了点时间成功编译了&#xff0c;写篇文章记录一下。当前版本&#xff1a;2024-1-13 应该…

MySQL数据自动同步到Es

Logstash 测试数据准备 DROP DATABASE IF EXISTS es;CREATE DATABASE es DEFAULT CHARACTER SET utf8;USE es;CREATE TABLE book (id INT NOT NULL,title VARCHAR(20),author VARCHAR(20),price DECIMAL(6,2),PRIMARY KEY(id) );DROP PROCEDURE IF EXISTS batchInsertBook;DELI…

关系数据库:关系数据结构基础与概念解析

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

代码随想录算法训练营第二十八天|93. 复原 IP 地址,78. 子集,90. 子集 II

93. 复原 IP 地址 题目 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址&#xff0c;但是 “0.0…

前端 - 基础 表单标签 -- 表单元素( input - type属性) 文本框和密码框

表单元素 &#xff1a; 在表单域中可以定义各种表单元素&#xff0c;这些表单元素就是允许用户在表单中输入或选择 的内容控件。 表单元素的外观也各不一样&#xff0c;有小圆圈&#xff0c;有正方形&#xff0c;也有方框&#xff0c;乱七八糟的&#xff0c;各种各样&#xf…

【深度学习】深度学习md笔记总结第1篇:深度学习课程,要求【附代码文档】

深度学习笔记完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;深度学习课程&#xff0c;深度学习介绍要求,目标,学习目标,1.1.1 区别。TensorFlow介绍&#xff0c;2.2 图与TensorBoard学习目标,2.2.1 什么是图结构,2.2.2 图相关操作,2.2.3 TensorBoard:可视…

数据资产管理解决方案:构建高效、安全的数据生态体系

在数字化时代&#xff0c;数据已成为企业最重要的资产之一。然而&#xff0c;如何有效管理和利用这些数据资产&#xff0c;却是许多企业面临的难题。本文将详细介绍数据资产管理解决方案&#xff0c;帮助企业构建高效、安全的数据生态体系。 一、引言 在信息化浪潮的推动下&a…

Linux之线程同步

目录 一、问题引入 二、实现线程同步的方案——条件变量 1、常用接口&#xff1a; 2、使用示例 一、问题引入 我们再次看看上次讲到的多线程抢票的代码&#xff1a;这次我们让一个线程抢完票之后不去做任何事。 #include <iostream> #include <unistd.h> #inc…

PB-03F模组蓝牙基础+主从机指令的使用

文章目录 前言一、蓝牙基础指令1. ATBLEMAC 设置和查询蓝牙 MAC 地址2. ATBLEMODE 查询和设置蓝牙模式3. ATBLERFPWR 蓝牙设置或查询发射功率4. ATBLESTATE 查询连接状态5. ATBLEDISCON 断开蓝牙连接6. ATBLEMTU 查询或者设置 MTU7. ATBLESEND 向蓝牙透传通道发送数据8. ATTRAN…
最新文章