Qt多线程间信号槽传递非QObject类型对象的参数
2015-04-19 06:26
495 查看
遇到:QObject::connect: Cannot queue arguments of type 'XXXXX',之类的错误。原因是使用排队方式的信号-槽机制,Qt的元对象系统(meta-object
system)必须知道信号传递的参数类型
解决方法有两种:
一、把自己定义的类型注册为元组类型,使用qRegisterMetaType()注册,可以把这个函数放在connect()函数使用之前。
二、在connect函数的第五个参数加入Qt::DirectConnection
这里手动改为直连方式,Qt的元对象系统就不必知道参数类型了,于是警告信息消失。但这样做是不安全的,具体可见Qt官方文档。
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官方文档。
相关文章推荐
- Qt多线程间信号槽传递非QObject类型对象的参数
- Qt多线程间信号槽传递非QObject类型对象的参数
- Qt多线程间信号槽传递非QObject类型对象的参数
- Qt多线程间信号槽传递非QObject类型对象的参数
- 信号槽传递非Qt库类型参数时,出现QObject::connect: Cannot queue arguments of type 'QUuid'(Make sure 'string' is regi
- Qt多线程间信号槽传递非QObject类型对象的参数
- Qt学习:线程间共享数据(使用信号槽传递数据,必须提前使用qRegisterMetaType来注册参数的类型)
- Qt中带有参数的信号传递出错--自定义类型的参数
- Qt 线程间信号槽传递自定义数据类型(qRegisterMetaType的使用)
- Qt的Linux 线程中传递,类的类型参数
- Qt:信号槽机制传递复杂类型参数(窗口通信)
- QObject提供了QMetaObject元类信息(相当于RTTI和反射),信号与连接,父子关系,调试信息,属性,事件,继承关系,窗口类型,线程属性,时间器,对象名称,国际化
- QtSoap传递多种类型参数
- QT 信号槽connect中解决自定义数据类型或数组作为函数参数的问题——QT qRegisterMetaType 注册MetaType——关键:注册自定义数据类型或QMap等容器类
- QT 自定义信号与信号槽方法及解决自定义数据类型或数组作为函数参数的问题
- java调用(axis2)WebService传递对象类型参数(源码)
- Qt信号与槽参数个数与类型问题
- java中传递参数的两种方式(int(基本类型),int[](对象类型))
- Javascript中对象类型的参数传递
- Qt的信号中没有足够的参数传递到槽中的实现方法