问题的提出:
Qt次线程向主程序发送信号收不到,信号槽connect返回也是true,排查原因如下:
信号或槽函数中的参数用到了自定义类型,如果要在Qt信号槽中使用自定义类型,需要注意使用qRegisterMetaType对自定义类型进行注册,当然在不跨线程时使用自定义类型signal/slot来传递,可能不会出现什么问题;一旦涉及跨线程就很容易出错,回想下信号槽的作用就是用来对象与对象之间通信的,难免会跨线程,建议在使用自定义类型利用信号槽通信时,最好先通过qRegisterMetaType()将自定义类型进行注册,以免出错。
总结qRegisterMetaType使用方法如下:
1、注册位置:在第一次使用此类链接跨线程的signal/slot之前,一般在当前类的构造函数中进行注册;
2、注册方法:在当前类的顶部包含:#include<QMetaType > ,构造函数中加入代码:qRegisterMetaType<Myclass>(“Myclass”);
3、Myclass的引用类型需单独注册:qRegisterMetaType<Myclass&>(“Myclass&”);
版权声明:本文为danshiming原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。