Cannot queue arguments of type

报错如下

这个QList<QVariantList> 在不跨线程的时候,没有一点问题。

在主线程中 新开一个线程去执行查询操作。

自己以为注册了,但是运行却报错。仔细查看后,发现 报错中提示是引用类型,而我注册的是非引用类型。

我在线程类中的信号参数是引用类型的。

所以我还需要注册引用类型

qRegisterMetaType<QList<QVariantList>>("QList<QVariantList>&");

这样运行就不报错了。

原因:当一个signal被放到队列中(queued)时,它的参数(arguments)也会被一起一起放到队列中(queued起来),这就意味着参数在被传送到slot之前需要被拷贝、存储在队列中(queue)中;为了能够在队列中存储这些参数(argument),Qt需要去construct、destruct、copy这些对象,而为了让Qt知道怎样去作这些事情,参数的类型需要使用qRegisterMetaType来注册

#qt##c++##多线程#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务