QObject::connect: Cannot queue arguments of type "xxx",(Make sure "xxx" is registed using qRegisterMetaType().)原因及解决方法

在线程中通过信号和槽函数传递信息的时候,由于用到了自己定义的参数结构:QHash<int , pMsg>,于是在发生信号传递的时候出现了报错:

QObject::connect: Cannot queue arguments of type "QHash<int , pMsg>",(Make sure "QHash<int , pMsg>" is registed using qRegisterMetaType().)

查找到原因为:

线程中信号和槽函数的传递,参数是默认放到队列中去的,但是这个自定义的参数结构,不是QT自带的参数结构,不能识别。

解决方法有两点:

(1)将不识别的参数结构进行注册,让QT能够识别。

A 包含头文件:#include <QMetaType>

B 在构造的类的构造函数中调用其方法完成注册:qRegisterMetaType< QHash<int , pMsg> >("QHash<int , pMsg>");

(2)直接调用对方槽函数,不保存参数,直接传递。

connect(pLink->module,SIGNAL(sendReportToMainWithHash(QHash<int,pMsg>,QString)),this,SLOT(receiveReportFromIecServiceWithHash(QHash<int,pMsg>,QString)), Qt::DirectConnection);

此种方法未测试,且官方认为这样做有风险,不推荐。

时间: 2024-11-10 16:18:46

QObject::connect: Cannot queue arguments of type "xxx",(Make sure "xxx" is registed using qRegisterMetaType().)原因及解决方法的相关文章

Object::connect: Cannot queue arguments of type &#39;QMap&lt;QString,QString&gt;&#39;(要使用qRegisterMetaType&lt;StringMap&gt;进行注册)

QObject::connect: Cannot queue arguments of type 'QMap<QString,QString>',(Make sure 'QMap<QString,QString>' is registered using qRegisterMetaType().). 上述错误,只有在跨线程信号传递时才会出现.  因为QMap是QT可识别的基本类型,不需要再注册元对象系统中,在同一个线程中运行没有问题. 源码: Cpp代码   // 线程类 thre

PyQt-QObject::connect: Cannot queue arguments...报错

[问题] 源码: class Windows(QtGui.QWidget):     # Creates a widget containing:     # - a QLineEdit (status_widget)     # - a button, connected to on_run_clicked     def on_run_clicked(self):         def update(text):             self.widget.setText(text)

【SQLServer】“无法对数据库’XXX’ 执行删除,因为它正用于复制”的解决方法

警告: 一个或多个现有列的 ANSI_PADDING 设置为 "off",将以 ANSI_PADDING 为 "on" 的设置重新创建 [SQLServer]"无法对数据库'XXX' 执行删除,因为它正用于复制"的解决方法 USE masterEXEC sp_removedbreplication 'YDBS_MFQJ_HomeWorksBook'GO

使用Ef查询出现的问题The cast to value type &#39;System.Boolean&#39; failed because the materialized value is null.的解决方法

把值类型的系统.布尔的失败是因为物化值是null.结果类型的泛型参数或查询必须使用可空类型. 解决方法: 请确保你查询中的字段值不为空或者做为空判断 使用Ef查询出现的问题The cast to value type 'System.Boolean' failed because the materialized value is null.的解决方法

ssm整合时出现 org.springframework.beans.factory.BeanCreationException :Error creating bean with name ‘XXX’ 异常的原因及解决方法

ssm整合时出现 org.springframework.beans.factory.BeanCreationException :Error creating bean with name 'XXX' 异常的原因及解决方法(只是可能出现下列几种,不包含全部) 此异常为:注入 bean 失败异常,也就是找不到注入的bean. 可能有以下几种原因: 1.bean未注解或者注解错误 2.项目整合的时候jar包冲突 3.'XXX'的配置有错误 解决:1,3仔细检查就是,网上大部分的人应该是2这种错误,

SQLServer “无法对数据库&#39;XXX&#39; 执行删除,因为它正用于复制”的解决方法

“无法对数据库'XXX'执行删除,因为它正用于复制” 解决办法: 执行  sp_removedbreplication 'XXX' 这个语句的解释是:从数据库中删除所有复制对象,但不更新分发服务器上的数据.此存储过程在发布服务器的发布数据库或订阅服务器的订阅数据库上执行. 然后“任务--分离“ 或者 执行  DROP DATABASE XXX SQLServer "无法对数据库'XXX' 执行删除,因为它正用于复制"的解决方法 原文地址:https://www.cnblogs.com/

hibernate xxx is not mapped 错误原因及解决方法

错误: "hibernate xxx is not mapped" 原因: xxx.hbm.xml文件没有发布到target相应目录中. 解决方法: pom.xml中,节点内添加如下代码: <sourceDirectory>src/main/java</sourceDirectory> <resources> <resource> <directory>src/main/java</directory> <e

Null value was assigned to a property of primitive type setter of&quot;原因及解决方法

原文:http://blog.csdn.net/kevinzhangfei/article/details/6995316 总结:在Java中使用大写的数据类型. 在action请求数据的过程中报出"Null value was assigned to a property of primitive type setter of"错误,搜索之后发现是因为数据库里相应的字段为NULL. 例如: Java代码 <!--Hibernate映射文件中的字段--> <prope

[转]Null value was assigned to a property of primitive type setter of&quot;原因及解决方法

原文地址:http://blog.csdn.net/kevinzhangfei/article/details/6995316 在action请求数据的过程中报出"Null value was assigned to a property of primitive type setter of"错误,搜索之后发现是因为数据库里相应的字段为NULL. 例如: Java代码 <!--Hibernate映射文件中的字段--> <property name="pri