错误1,发射信号成功,connect成功,但是没有进入到slot执行时
提示:
QObject::connect: Cannot queue arguments of type ‘SomeDTO’
(Make sure ‘SomeDTO’ is registered using qRegisterMetaType().)
原因:当一个signal被放到队列中(queued)时,它的参数(arguments)也会被一起一起放到队列中(queued起来),这就意味着参数在被传送到slot之前需要被拷贝、存储在队列中(queue)中;为了能够在队列中存储这些参数(argument),Qt需要去construct、destruct、copy这些对象,而为了让Qt知道怎样去作这些事情,参数的类型需要使用qRegisterMetaType来注册(如错误提示中的说明)
参考:https://blog.youkuaiyun.com/wadfji/article/details/54406767
如果signal的参数是Vector,也要qRegisterMetaType。
错误2,connect编译错误,无法讲参数1从T*转换为…
提示:
C2664 “QMetaObject::Connection QObject::connect(const QObject *,const char *,const char *,Qt::ConnectionType) const”: 无法将参数 1 从“T *”转换为“const DataCore *”
原因:connect的第一个参数,是定义信号的类,而不是发射信号的类。信号在DataCore 中定义,在NetManager发射,connect的第一个参数应该是DataCore 的指针,而不是NetManager。
正确做法:在UI类中,connect(定义信号的类的指针,信号,信号目的地的类的指针,槽函数)
在UI类中,qRegisterMetaType