如果不跨线程进行传递的话,使用信号传递自定义的数据类型不会又什么问题。
但如果跨线程进行传递,即connection的最后一个参数设置为Queue Connection,则需要进行以下操作。
如果未绑定,编译阶段也会提示以下错误信息:
QObject::connect: Cannot queue arguments of type 'MyClass' (Make sure 'MyClass' is registed using qRegisterMetaType().)
同时在实际的运行中也会发现,该信号槽没有起作用。
解决方法:
即使用qRegisterMetaType()将自定义类型进行注册
使用方法如下:
1、注册位置:要在第一次使用该信号槽之前,一般在当前类的构造函数中进行注册;
2、注册方法:在当前类的顶部包含:#include <QMetaType>,构造函数中加入代码:qRegisterMetaType<MyClass>("Myclass");
3、Myclass的引用类型需单独注册:qRegisterMetaType<MyClass>("Myclass&");
评论