QObject::connect: Cannot queue arguments of type 'QByteArray&' (Make sure 'QByteArray&' is registered using qRegisterMetaType().)

在写功能时,一次 从子线程 串口读取数据 发回给主线程。使用信号槽,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好像是可以不用注册。

莫名其妙的要求,哎。

 

posted @ 2023-05-19 09:37  伟大的厨师  阅读(102)  评论(0编辑  收藏  举报