Qt跨线程信号与槽无响应(调用)问题

环境

Windows Qt C++ Qt5.14.2 msvc编译

问题描述

信号在独立线程中,槽函数在主线程中,传递QByteArray&参数,调试跟踪发现槽函数没有调用。

解决方法

修改去掉槽函数和信号中QByteArray 的&符号,经过调试发现线程成功被调用。connect第五参数为Qt::UniqueConnection

原理分析

跨线程情景下:

  1. 信号与槽函数形参使用引用会导致连接不成功,emit后,引用的实体已经不存在了。
  2. 信号与槽函数形参不能使用指针。
  3. 确保信号和槽函数不传递QObject或其派生类的对象,QObject会报跨线程错误
  4. 应该使用值传递

总结

Qt跨线程信号与槽无响应(调用)问题,不能使用引用、指针和QObject对象,必须使用值传递

你可能感兴趣的:(qt,开发语言)