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

相关文章

Windows server服务器使用blat命令行发送邮件

《Windowsserver服务器使用blat命令行发送邮件》在linux平台的命令行下可以使用mail命令来发送邮件,windows平台没有内置的命令,但可以使用开源的blat,其官方主页为ht... 目录下载blatBAT命令行示例备注总结在linux平台的命令行下可以使用mail命令来发送邮件,Win

使用Java发送邮件到QQ邮箱的完整指南

《使用Java发送邮件到QQ邮箱的完整指南》在现代软件开发中,邮件发送功能是一个常见的需求,无论是用户注册验证、密码重置,还是系统通知,邮件都是一种重要的通信方式,本文将详细介绍如何使用Java编写程... 目录引言1. 准备工作1.1 获取QQ邮箱的SMTP授权码1.2 添加JavaMail依赖2. 实现

Qt实现发送HTTP请求的示例详解

《Qt实现发送HTTP请求的示例详解》这篇文章主要为大家详细介绍了如何通过Qt实现发送HTTP请求,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、添加network模块2、包含改头文件3、创建网络访问管理器4、创建接口5、创建网络请求对象6、创建一个回复对

mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据

《mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据》文章主要介绍了如何从.frm和.ibd文件恢复MySQLInnoDB表结构和数据,需要的朋友可以参... 目录一、恢复表结构二、恢复表数据补充方法一、恢复表结构(从 .frm 文件)方法 1:使用 mysq

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

Python手搓邮件发送客户端

《Python手搓邮件发送客户端》这篇文章主要为大家详细介绍了如何使用Python手搓邮件发送客户端,支持发送邮件,附件,定时发送以及个性化邮件正文,感兴趣的可以了解下... 目录1. 简介2.主要功能2.1.邮件发送功能2.2.个性签名功能2.3.定时发送功能2. 4.附件管理2.5.配置加载功能2.6.

解决Cron定时任务中Pytest脚本无法发送邮件的问题

《解决Cron定时任务中Pytest脚本无法发送邮件的问题》文章探讨解决在Cron定时任务中运行Pytest脚本时邮件发送失败的问题,先优化环境变量,再检查Pytest邮件配置,接着配置文件确保SMT... 目录引言1. 环境变量优化:确保Cron任务可以正确执行解决方案:1.1. 创建一个脚本1.2. 修