emit信号发送结构体
来源:互联网 发布:mac输入法表情符号 编辑:程序博客网 时间:2024/04/28 13:16
这个是我结合网上是资料,整理出来的两中方法, 参考过的网页:http://blog.chinaunix.net/uid-28235086-id-3427874.html
屏蔽的是第一种方法: 数据很少,可以定义多个形参,像串口接收过来的数据这样的,直接使用即可。
没有屏蔽的是第二种方法, 自己定义结构体,结合QVariant 来使用。
- #ifndef CCOMCTROL_H
- #define CCOMCTROL_H
- #include <QObject>
- #include <QTimer>
- typedef unsigned char u8_t;
- typedef unsigned short u16_t;
- #include <QMetaType>
- #include <QVariant>
- #pragma pack(push,1)
- typedef struct __comRcvData_s
- {
- u8_t len;
- u8_t *ptr;
- }comRcvData_s;
- #pragma pack(pop)
- Q_DECLARE_METATYPE(comRcvData_s)//这里很重要不能漏
- class CComCtrol : public QObject
- {
- Q_OBJECT
- public:
- explicit CComCtrol(QObject *parent = 0);
- ~CComCtrol();
- signals:
- // void rcvComData(const u8_t *data, int len);
- void rcvComData(QVariant dataVar);
- public slots:
- void TimeOutProc();
- private:
- QTimer time1;
- int cnt;
- };
- #endif // CCOMCTROL_H
- #ifndef CTESTDEFINESIGNAL_H
- #define CTESTDEFINESIGNAL_H
- #include <QtGui/QWidget>
- #include "ccomctrol.h"
- #include <QVariant>
- class CTestDefineSignal : public QWidget
- {
- Q_OBJECT
- public:
- CTestDefineSignal(QWidget *parent = 0);
- ~CTestDefineSignal();
- private slots:
- // void PrintRcvData(const u8_t *data,int len);
- void PrintRcvData(QVariant dataVar);
- private:
- CComCtrol *m_comCtrol;
- };
- #endif // CTESTDEFINESIGNAL_H
- #include "ccomctrol.h"
- CComCtrol::CComCtrol(QObject *parent) :
- QObject(parent)
- {
- comRcvData_s askData;
- QVariant DataVar;
- DataVar.setValue(askData);
- qRegisterMetaType<QVariant>("QVariant"); //写在构造函数里
- connect(&time1,SIGNAL(timeout()),this,SLOT(TimeOutProc()));
- time1.start(200);
- }
- CComCtrol::~CComCtrol()
- {
- }
- void CComCtrol::TimeOutProc()
- {
- comRcvData_s rcvData;
- u8_t buffer[10];
- rcvData.len=10;
- cnt+=10;
- for(int i=0;i<10;i++)
- {
- buffer[i]=cnt+i;
- }
- rcvData.ptr=buffer;
- QVariant var1;
- var1.setValue(rcvData); //设置发送的容器
- emit rcvComData(var1);
- ///time1.stop();
- }
- #include "ctestdefinesignal.h"
- #include <QDebug>
- CTestDefineSignal::CTestDefineSignal(QWidget *parent)
- : QWidget(parent)
- {
- m_comCtrol=new CComCtrol;
- // connect(m_comCtrol,SIGNAL(rcvComData(const u8_t *,int)),this,SLOT(PrintRcvData(const u8_t *,int)));
- connect(m_comCtrol,SIGNAL(rcvComData(QVariant)),this,SLOT(PrintRcvData(QVariant)));
- }
- CTestDefineSignal::~CTestDefineSignal()
- {
- }
- /*void CTestDefineSignal::PrintRcvData(const u8_t *data,int len)
- {
- qDebug()<<"CTestDefineSignal::data len:"<<len;
- for(int i=0;i<len;i++)
- {
- qDebug()<<data[i];
- }
- }
- */
- void CTestDefineSignal::PrintRcvData(QVariant dataVar)
- {
- comRcvData_s askData;
- askData = dataVar.value<comRcvData_s>();
- qDebug()<<"CTestDefineSignal::data len:"<<askData.len;
- for(int i=0;i<askData.len;i++)
- {
- qDebug()<<askData.ptr[i];
- }
- }
- #include <QtGui/QApplication>
- #include "ctestdefinesignal.h"
- #include "ccomctrol.h"
- #include <QVariant>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- CTestDefineSignal w;
- w.show();
- return a.exec();
- }
0 0
- emit信号发送结构体
- linux信号处理、killall、SIGALRM、sigaction函数和结构体、向进程发送信号
- linux信号处理、killall、SIGALRM、sigaction函数和结构体、向进程发送信号
- emit发射信号 在信号中以&引用作为参数
- linux中的信号结构体
- 串口发送结构体
- sendmessage发送结构体
- send()发送结构体
- socket发送结构体
- Linux发送结构体
- QThread与其他线程间相互通信,emit,发射信号
- QThread与其他线程间相互通信,emit,发射信号
- QThread与其他线程间相互通信,emit,发射信号
- Qt中信号与槽机制中emit的应用
- qt不同线程emit信号需要使用qMetaType
- Java中发送结构体
- C++ socket发送结构体
- socket发送结构体 小结
- [leetcode] Wildcard Matching
- cocos2dx开发中的lua继承与覆盖C++方法
- date datetime java。util。Date java。sql。date
- 命令顺序不正确。 服务器响应为: Error: need EHLO and AUTH first
- CSS3制作文字半透明倒影效果
- emit信号发送结构体
- Chapter 2 Representing and Manipulating Information 《CSAPP 笔记》
- [leetcode] Restore IP Addresses
- UVa 11464 Even Parity
- PAT 1085. Perfect Sequence
- 黑马程序员_JAVA基础5_String
- 如何从ST官网上下载STM32F10x芯片固件库?
- 【ThinkingInC++】43、内建类型封装在一个类里
- hdu 1312