Qt次线程向主程序发送信号收不到的问题
(2020-06-16 13:32:22)
问题的提出:
Qt次线程向主程序发送信号收不到,信号槽connect返回也是true,排查原因如下:
信号中用到了自定义函数,如果要在Qt信号槽中使用自定义类型,需要注意使用qRegisterMetaType对自定义类型进行注册,当然在不跨线程时使用自定义类型signal/slot来传递,可能不会出现什么问题;一旦涉及跨线程就很容易出错,回想下信号槽的作用就是用来对象与对象之间通信的,难免会跨线程,建议在使用自定义类型利用信号槽通信时,最好先通过qRegisterMetaType()将自定义类型进行注册,以免出错。
总结qRegisterMetaType使用方法如下:
1、注册位置:在第一次使用此类链接跨线程的signal/slot之前,一般在当前类的构造函数中进行注册;
2、注册方法:在当前类的顶部包含:#include[QMetaType ]
,构造函数中加入代码:qRegisterMetaType[Myclass]("Myclass");
3、Myclass的引用类型需单独注册:qRegisterMetaType[Myclass&]("Myclass&");
由于新浪博客显示不了尖括号,请将中括号改为尖括号

加载中…