环境
Windows Qt C++ Qt5.14.2 msvc编译
问题描述
信号在独立线程中,槽函数在主线程中,传递QByteArray&参数,调试跟踪发现槽函数没有调用。
解决方法
修改去掉槽函数和信号中QByteArray 的&符号,经过调试发现线程成功被调用。connect第五参数为Qt::UniqueConnection
原理分析
跨线程情景下:
- 信号与槽函数形参使用引用会导致连接不成功,emit后,引用的实体已经不存在了。
- 信号与槽函数形参不能使用指针。
- 确保信号和槽函数不传递QObject或其派生类的对象,QObject会报跨线程错误
- 应该使用值传递
总结
Qt跨线程信号与槽无响应(调用)问题,不能使用引用、指针和QObject对象,必须使用值传递
1219

被折叠的 条评论
为什么被折叠?



