您的位置:首页 > 移动开发 > Objective-C

Qt多线程间信号槽传递非QObject类型对象的参数

2015-04-19 06:26 495 查看
遇到:QObject::connect: Cannot queue arguments of type 'XXXXX',之类的错误。原因是使用排队方式的信号-槽机制,Qt的元对象系统(meta-object
system)必须知道信号传递的参数类型

解决方法有两种:

一、把自己定义的类型注册为元组类型,使用qRegisterMetaType()注册,可以把这个函数放在connect()函数使用之前。

#include <QMetaType>//记得包含这个头文件
//my_type是我自己定义的类型
qRegisterMetaType<my_type>("my_type");
connect(xx,SIGNAL(xx(my_type)),xx,SLOT(xx(my_type)));

二、在connect函数的第五个参数加入Qt::DirectConnection

connect(xx,SIGNAL(xx(my_type)),xx,SLOT(xx(my_type)),connect(xx,SIGNAL(xx(my_type)),xx,SLOT(xx(my_type)))

这里手动改为直连方式,Qt的元对象系统就不必知道参数类型了,于是警告信息消失。但这样做是不安全的,具体可见Qt官方文档。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐