Qt____在信号和槽中使用自己定义的结构体____操作
来源:互联网 发布:js弹出div窗口 编辑:程序博客网 时间:2024/06/05 03:20
这个是我结合网上是资料,整理出来的两中方法, 参考过的网页: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_OBJECTpublic: 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();}
- Qt____在信号和槽中使用自己定义的结构体____操作
- 线程中通过信号和槽函数传递信息的时候,由于用到了自己定义的参数结构,所以使用qRegisterMetaType
- 在C#中定义和使用自己的特性
- 在C#中定义和使用自己的特性
- 在Visual C#中定义和使用自己的特性
- 在C#中定义和使用自己的特性
- 在C#.net中定义和使用自己的特性
- 在QT的信号和槽中使用自定义类型
- 程序片段----std::set中使用自己定义的结构体需要重载小于号 20170904
- (翻译)在C#中定义和使用自己的特性
- 在html中使用自己定义的字体(font)
- 在ROS中定义并使用自己的消息类型
- DELPHI结构体的定义和使用
- 结构体指针的定义和使用
- 结构体的操作符重载和内部的函数定义及使用(结构体的进一步使用)
- 结构的定义和使用
- C#中定义和使用自己的特性(二)
- 在Struts2中定义自己的Interceptor
- unix进程
- ZooKeeper安装运行
- Eclipse editor does not contain a main type的解决方案
- C#中调用Windows API的要点
- cs文件中不能继承System.Web.UI.Page问题的解决方法
- Qt____在信号和槽中使用自己定义的结构体____操作
- 让宝贝爱上听故事——《故事口袋听听》安卓版V2.4上线
- Activity 的生命週期
- 使用游标的方式删除表中相同的记录,并只留下其中一条
- vlan
- [Happy Coding] 只用BIT操作,求解整型和浮点数的绝对值
- EL900音色编辑之‘包络(Envelope)简单释义’
- MyEclipse 8.5 安装配置指南 .
- android activity