首页 > 其他分享 >QObject::connect: Cannot queue arguments of type 'QByteArray&' (Make sure 'QByteArray

QObject::connect: Cannot queue arguments of type 'QByteArray&' (Make sure 'QByteArray

时间:2023-05-19 09:45:18浏览次数:26  
标签:SLOT sure QByteArray pSerialTTyWK2 SIGNAL qRegisterMetaType connect QString

在写功能时,一次 从子线程 串口读取数据 发回给主线程。使用信号槽,QByteArray作为参数,在linux开发板系统下 一运行 没有任何提示,也没数据。

而测试一下使用QString作参数确可以触发槽函数,想不明白为什么,也没查到原因。

不得已,只好把相关代码移植 到windows下模拟一下慢慢调式。

if(m_pSerialTTyWK2==NULL && m_pThreadTTyWK2 ==NULL)
    {
        m_pSerialTTyWK2 = new SerialPortProc(this);
        m_pThreadTTyWK2 = new QThread(this);
        qDebug()<<" ----- >>> New m_pSerialTTyWK2 Thread";
        m_pSerialTTyWK2->moveToThread(m_pThreadTTyWK2);
        connect(this,SIGNAL(SendOpenSerialTTyWK2Signal(QString,QString)),m_pSerialTTyWK2,SLOT(OnDataReceivedOpenSerialPort(QString,QString)));
        connect(m_pSerialTTyWK2,SIGNAL(SendComDataArrivedSignal(QByteArray&)),this,SLOT(OnRecvdTTyWK2Data(QByteArray&)));
        //connect(this,SIGNAL(SendDataToSerialPortProcSignal(QByteArray&)),m_pSerialTTyWK2,SLOT(OnDataReceivedWriteToSerialPort(QByteArray&)));
        //connect(this,SIGNAL(SendDataToSerialPortProcSignal(char*,int)),m_pSerialTTyWK2,SLOT(OnDataReceivedWriteToSerialPort(char*,int)));

        connect(m_pSerialTTyWK2,SIGNAL(SendTestSignal(QByteArray)),this,SLOT(OnDataRecvdTestSlot(QByteArray)));


        m_pThreadTTyWK2->start();

        emit SendOpenSerialTTyWK2Signal("COM3","9600");
    }

如上:connect(m_pSerialTTyWK2,SIGNAL(SendComDataArrivedSignal(QByteArray&)),this,SLOT(OnRecvdTTyWK2Data(QByteArray&))); 是从子线程 发串口数据到主线程,主线程的槽确收不到。会有个提示:QObject::connect: Cannot queue arguments of type 'QByteArray&' (Make sure 'QByteArray&' is registered using qRegisterMetaType().),然而在开发板里运行 确没有提示。

qRegisterMetaType<QByteArray>("QByteArray&"); 注册一下 是可以了。

但是 为什么需要注册?

如果 非跨线程,传递QByteArray好像是可以不用注册。

莫名其妙的要求,哎。

 

标签:SLOT,sure,QByteArray,pSerialTTyWK2,SIGNAL,qRegisterMetaType,connect,QString
From: https://www.cnblogs.com/totogo/p/17414009.html

相关文章

  • How to ensure all the deposits to exchange accounts are reflected properly?
    Accounts,includingexchangeaccounts,canreceivefundsintwoways:an“external”,or“top-level”transfer(eg.iff1XXXsendsamessagetof1ZZZthattransfers1FIL),and“internal”transfers”thatresultfromasubinvocation.Anexampleof“inter......
  • 接口测试框架REST Assured(一) 测试get接口
    使用RESTAssured接口测试框架测试get接口主要依赖rest-assured-5.2.0.jarstep1:传入get的params参数 step2:调用get方法 对比使用postman发get请求 返回结果 ......
  • 接口测试框架REST Assured(一) 测试post接口
    使用RESTAssured接口测试框架测试post接口主要依赖rest-assured-5.2.0.jarstep1:传入post的body参数 step2:调用post方法发起请求 对比使用postman发起post请求  ......
  • ocidll forced to load library,initialization error could not initialize make sure
    是因为你使用pl/sql是64位的,但是软件只找到了32位的oracle客户端 多次尝试,我的pl/sql是64位,但是这里需要对应的使用64位,我的方案是下载https://www.allroundautomations.com/registered-plsqldev/ 这个版本的软件 这样配置,32位的使用,这里需要手动配置的,如果是64位的pl/......
  • 4.[1201D - Treasure Hunting](https://codeforces.com/problemset/problem/1201/D)
    4.1201D-TreasureHunting题目意思:在一个n*m的地图上面,左下角的坐标是(1,1),最开始你位于左下角,一秒钟你可以进行往左或者往右的操作,你只能在一些特殊的列上面进行往上移动的操作,你不可以往下移动。现在告诉你k个宝藏的坐标信息以及哪些列是允许往上的,问最后至少要几秒可以遍历k......
  • backpressure 背压介绍
    当数据流启动时,源就开始把一行行数据填到一个类似桶的缓存(buffer)中。源根本不知道下游是什么。一旦缓存满了,桶就随着流水线流到下游组件(component)上,同时引擎抓一个新的空缓存过来给源。源根本不知道这一切,它只是不断地填桶。有时源填了太多的桶,转换和端都来不及应付了;此时引擎会......
  • 10 iozone Examples for Disk I/O Performance Measurement on Linux
    https://www.thegeekstuff.com/2011/05/iozone-examples/ Aswediscussedinour Linuxperformancemonitoringintroduction article,measuringIOsubsystemperformanceisveryimportant.Ifsomeoneiscomplainingthatadatabase(oranyapplication)running......
  • hdu 5446 长春区域赛网络赛1010 Unknown Treasure(lucas定理+中国剩余定理+移位乘法)
    题目链接:hdu5446题目大意:求出Cmn%M,M=p1⋅p2⋯pk题目分析:首先对于每个质数pi我们,我们可以利用Lucas定理求出Cmn%pi的值,Lucas定理如下:Cmn%p=Cm/pn/p⋅Cm%pn%p%p然后我们可以利用中国剩余定理求取最后答案:M=∏i=1kpi,Mi=M/piCmn%M=∑i=1kCmn%pi⋅Mi⋅inv[Mi]因为做乘法......
  • 如何评价 ChatGPT 回答策略的 ensure only ethical usage 特质
    有人批评ChatGPT的回答策略是ensureonlyethicalusage,如何理解这句话?这句话的意思是,ChatGPT被批评的回答策略只是确保其在伦理上的使用,即遵循道德和法律规范。这意味着ChatGPT的开发者们试图避免ChatGPT被用于违反伦理或法律规定的行为,例如欺诈、虚假宣传、人身攻击、歧视等......
  • 什么是软件的 Legal Disclosure?
    软件的Legaldisclosure指的是软件开发者或发布者为了合法合规地向用户提供软件服务而提供的法律声明和公告。这些声明通常包括软件的版权信息、许可证信息、使用条款和隐私政策等内容。版权信息声明通常包括软件的作者和所有者,以及软件的版权说明和保留条款。许可证信息则涉及......