一、以前就发现过这个问题:
在Qt项目中,有时候为了让自己的类,可以重载操作符 '=','<>'. 也有时候需要用一个类进行文件的读写,所以很多C++类还是要简单化的,不需要继承QObject,不需要Qt的元对象机制。
但是对于这些简单C++类,有些时候要是调用Qt的信号槽当做参数进行跨线程发送,就会出现如下问题:
这种情况一般,编译可以通过,但会出现如下提示。
QOBject::connect:Cannot queue arguments of type 'MoSystemLog'
(Make sure 'MoSystemLog' is registed using qRegisterMetaType().)
意思是说,信号槽队列中的数据类型必须是系统能识别的元类型,不然得用qRegisterMetaType()进行注册。
二、解决方法:
第一种注册法:qRegisterMetatType("MoSystemLog")
第二种修改Connect,加一个属性Qt::directConnection.
connect(cm, SIGNAL(sendLog(QUuid, QByteArray, bool)),
this,SLOT(sendRes(QUuid,QByteArray,bool)),Qt::DirectConnection);
三、方法解释:
1、第一种解决方法,即使用排队方式的信号-槽机制,Qt的元对象系统(meta-object system)必须知道信号传递的参数类