emit信号发送结构体

2024-06-08 09:38
文章标签 结构 信号 发送 emit

本文主要是介绍emit信号发送结构体,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这个是我结合网上是资料,整理出来的两中方法, 参考过的网页:http://blog.chinaunix.net/uid-28235086-id-3427874.html

屏蔽的是第一种方法: 数据很少,可以定义多个形参,像串口接收过来的数据这样的,直接使用即可。

没有屏蔽的是第二种方法, 自己定义结构体,结合QVariant 来使用。


[html]  view plain copy
  1. #ifndef CCOMCTROL_H  
  2. #define CCOMCTROL_H  
  3.   
  4. #include <QObject>  
  5. #include <QTimer>  
  6. typedef  unsigned char u8_t;  
  7. typedef  unsigned short u16_t;  
  8.  #include <QMetaType>  
  9. #include <QVariant>  
  10.   
  11. #pragma pack(push,1)  
  12. typedef struct __comRcvData_s  
  13. {  
  14.   u8_t len;  
  15.   u8_t *ptr;  
  16. }comRcvData_s;  
  17. #pragma pack(pop)  
  18.   
  19.   
  20. Q_DECLARE_METATYPE(comRcvData_s)//这里很重要不能漏  

  1. class CComCtrol : public QObject  
  2. {  
  3.     Q_OBJECT  
  4. public:  
  5.     explicit CComCtrol(QObject *parent = 0);  
  6.     ~CComCtrol();  
  7. signals:  
  8.    // void  rcvComData(const u8_t *data, int len);  
  9.     void rcvComData(QVariant dataVar);  
  10. public slots:  
  11.    void TimeOutProc();  
  12.   private:  
  13.        QTimer time1;  
  14.        int cnt;  
  15. };  
  16.   
  17. #endif // CCOMCTROL_H  

[html]  view plain copy
  1. #ifndef CTESTDEFINESIGNAL_H  
  2. #define CTESTDEFINESIGNAL_H  
  3.   
  4. #include <QtGui/QWidget>  
  5. #include "ccomctrol.h"  
  6. #include <QVariant>  
  7. class CTestDefineSignal : public QWidget  
  8. {  
  9.     Q_OBJECT  
  10.       
  11. public:  
  12.     CTestDefineSignal(QWidget *parent = 0);  
  13.     ~CTestDefineSignal();  
  14.   
  15. private slots:  
  16.    // void PrintRcvData(const u8_t *data,int len);  
  17.     void PrintRcvData(QVariant dataVar);  
  18. private:  
  19.     CComCtrol  *m_comCtrol;  
  20. };  
  21.   
  22. #endif // CTESTDEFINESIGNAL_H  

[html]  view plain copy
  1. #include "ccomctrol.h"  
  2.   
  3.   
  4. CComCtrol::CComCtrol(QObject *parent) :  
  5.     QObject(parent)  
  6. {  
  7.     comRcvData_s askData;  
  8.     QVariant DataVar;  
  9.     DataVar.setValue(askData);  
  10.     qRegisterMetaType<QVariant>("QVariant"); //写在构造函数里  
  11.   
  12.     connect(&time1,SIGNAL(timeout()),this,SLOT(TimeOutProc()));  
  13.     time1.start(200);  
  14. }  
  15. CComCtrol::~CComCtrol()  
  16. {  
  17. }  
  18. void CComCtrol::TimeOutProc()  
  19. {  
  20.     comRcvData_s rcvData;  
  21.     u8_t  buffer[10];  
  22.     rcvData.len=10;  
  23.     cnt+=10;  
  24.     for(int i=0;i<10;i++)  
  25.     {  
  26.         buffer[i]=cnt+i;  
  27.     }  
  28.     rcvData.ptr=buffer;  
  29.   
  30.        QVariant var1;  
  31.        var1.setValue(rcvData);  //设置发送的容器
  32.   
  33.   emit rcvComData(var1);  
  34. ///time1.stop();  
  35. }  

[html]  view plain copy
  1. #include "ctestdefinesignal.h"  
  2. #include <QDebug>  
  3.   
  4. CTestDefineSignal::CTestDefineSignal(QWidget *parent)  
  5.     : QWidget(parent)  
  6. {  
  7.     m_comCtrol=new CComCtrol;  
  8.   
  9.    // connect(m_comCtrol,SIGNAL(rcvComData(const u8_t *,int)),this,SLOT(PrintRcvData(const u8_t *,int)));  
  10.   
  11.     connect(m_comCtrol,SIGNAL(rcvComData(QVariant)),this,SLOT(PrintRcvData(QVariant)));  
  12. }  
  13.   
  14. CTestDefineSignal::~CTestDefineSignal()  
  15. {  
  16.       
  17. }  
  18. /*void CTestDefineSignal::PrintRcvData(const u8_t *data,int len)  
  19. {  
  20.     qDebug()<<"CTestDefineSignal::data len:"<<len;  
  21.     for(int i=0;i<len;i++)  
  22.     {  
  23.         qDebug()<<data[i];  
  24.     }  
  25. }  
  26. */  
  27. void CTestDefineSignal::PrintRcvData(QVariant dataVar)  
  28. {  
  29.     comRcvData_s askData;  
  30.     askData = dataVar.value<comRcvData_s>();  
  31.   
  32.     qDebug()<<"CTestDefineSignal::data len:"<<askData.len;  
  33.     for(int i=0;i<askData.len;i++)  
  34.     {  
  35.         qDebug()<<askData.ptr[i];  
  36.     }  
  37. }  

[html]  view plain copy
  1. #include <QtGui/QApplication>  
  2. #include "ctestdefinesignal.h"  
  3. #include "ccomctrol.h"  
  4. #include <QVariant>  
  5.   
  6.   
  7. int main(int argc, char *argv[])  
  8. {  
  9.     QApplication a(argc, argv);  
  10.     CTestDefineSignal w;  
  11.     w.show();  
  12.       
  13.     return a.exec();  
  14. }  

这篇关于emit信号发送结构体的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1041823

相关文章

MySQL快速复制一张表的四种核心方法(包括表结构和数据)

《MySQL快速复制一张表的四种核心方法(包括表结构和数据)》本文详细介绍了四种复制MySQL表(结构+数据)的方法,并对每种方法进行了对比分析,适用于不同场景和数据量的复制需求,特别是针对超大表(1... 目录一、mysql 复制表(结构+数据)的 4 种核心方法(面试结构化回答)方法 1:CREATE

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Java发送SNMP至交换机获取交换机状态实现方式

《Java发送SNMP至交换机获取交换机状态实现方式》文章介绍使用SNMP4J库(2.7.0)通过RCF1213-MIB协议获取交换机单/多路状态,需开启SNMP支持,重点对比SNMPv1、v2c、v... 目录交换机协议SNMP库获取交换机单路状态获取交换机多路状态总结交换机协议这里使用的交换机协议为常

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录

SpringBoot利用树形结构优化查询速度

《SpringBoot利用树形结构优化查询速度》这篇文章主要为大家详细介绍了SpringBoot利用树形结构优化查询速度,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一个真实的性能灾难传统方案为什么这么慢N+1查询灾难性能测试数据对比核心解决方案:一次查询 + O(n)算法解决