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

相关文章

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Python循环结构全面解析

《Python循环结构全面解析》循环中的代码会执行特定的次数,或者是执行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都执行一次,这篇文章给大家介绍Python循环结构解析,感兴趣的朋友跟随... 目录for-in循环while循环循环控制语句break语句continue语句else子句嵌套的循

全屋WiFi 7无死角! 华硕 RP-BE58无线信号放大器体验测评

《全屋WiFi7无死角!华硕RP-BE58无线信号放大器体验测评》家里网络总是有很多死角没有网,我决定入手一台支持Mesh组网的WiFi7路由系统以彻底解决网络覆盖问题,最终选择了一款功能非常... 自2023年WiFi 7技术标准(IEEE 802.11be)正式落地以来,这项第七代无线网络技术就以超高速

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

Python+PyQt5实现文件夹结构映射工具

《Python+PyQt5实现文件夹结构映射工具》在日常工作中,我们经常需要对文件夹结构进行复制和备份,本文将带来一款基于PyQt5开发的文件夹结构映射工具,感兴趣的小伙伴可以跟随小编一起学习一下... 目录概述功能亮点展示效果软件使用步骤代码解析1. 主窗口设计(FolderCopyApp)2. 拖拽路径

使用Python和SQLAlchemy实现高效的邮件发送系统

《使用Python和SQLAlchemy实现高效的邮件发送系统》在现代Web应用中,邮件通知是不可或缺的功能之一,无论是订单确认、文件处理结果通知,还是系统告警,邮件都是最常用的通信方式之一,本文将详... 目录引言1. 需求分析2. 数据库设计2.1 User 表(存储用户信息)2.2 CustomerO

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark