遇到: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官方文档。