怎么修改网站图标,做php网站前端价格,笔记本做网站外网访问,网银网站模板信号与槽机制是绝对不可或缺且常用的#xff0c;其中的参数一般都会比较简单#xff0c;bool、int、QString之类的#xff0c;但当我们想要传递相对比较复杂的参数#xff0c;例如QVectorint、QListQString#xff0c;以及一些我们自定义的结构体时#…信号与槽机制是绝对不可或缺且常用的其中的参数一般都会比较简单bool、int、QString之类的但当我们想要传递相对比较复杂的参数例如QVectorint、QListQString以及一些我们自定义的结构体时在尝试触发某个信号时程序崩溃或者报错QObject::connect: Cannot queue arguments of type xxx(Make sure xxx is registered using qRegisterMetaType().)。 原因大概就是信号槽的参数不支持你自定义的类型只能识别QT库中最基本的类型参数所以需要对自定义类型进行注册解决办法
qRegisterMetaTypexxx(xxx);//xxx是你的信号要传递的数据类型.
在Qt信号槽中使用自定义类型在不跨线程时使用自定义类型signal/slot来传递可能不会出现什么问题一旦涉及跨线程就很容易出错即文章开头出现的错误。所以建议在使用自定义类型利用信号槽通信时最好先通过qRegisterMetaType()将自定义类型进行注册以免出错。总结qRegisterMetaType使用方法如下 1、注册位置在第一次使用此类链接跨线程的signal/slot之前一般在当前类的构造函数中进行注册 2、注册方法在当前类的顶部包含#include QMetaType构造函数中加入代码qRegisterMetaTypeMyClass(Myclass) 3、Myclass的引用类型需单独注册qRegisterMetaTypeMyClass(Myclass)