QObject :: connect:不能对'int&'类型的参数进行排队

Thi*_*bel 11 c++ qt qthread

我试着这样做:

connect(this, SIGNAL(signalClicked(int&)),  classA, SLOT(doWork(int&)));
Run Code Online (Sandbox Code Playgroud)

但我在标题中得到了消息.所以我已经探索了互联网,我想出了这个不起作用的解决方案:

 qRegisterMetaType<int&>("Type");
 connect(this, SIGNAL(signalClicked(Type)),  classA, SLOT(doWork(Type)));
Run Code Online (Sandbox Code Playgroud)

(错误:没有用于调用'qRegisterMetaType(const char [5])'的匹配函数)

有解决方案吗 谢谢你的帮助.

Dan*_*urn 21

如果Qt试图对参数进行排队,则意味着连接在线程之间.这不适用于非const引用.

您可以使用reference_wrapper解决此问题,但我强烈建议您重新考虑您的设计.在信号/插槽连接中通过引用传递值不是一个好主意.

  • @ Dan-Milburn,当Qt复制对象时,为什么通过引用传递值不是一个好主意? (3认同)
  • @Thibel,您可以在每次更改该变量的值时在主函数中发出一个信号,将该值作为参数传递给线程中的槽。另请注意,使用排队连接时,不能将非常量引用作为信号和槽中的参数传递。 (2认同)