Qt:信号槽通过const参考

时间:2015-02-08 14:06:18

标签: c++ qt pass-by-reference signals-slots pass-by-value

许多qt示例做了以下事情:

signal: passByConstRef(const QImage &)
slot: receivedByConstRef( const QImage &)

它们通过不同线程中的排队连接进行连接。 在主题1中:

{QImage image; 
 image = fromData(...);
 emit passByConstRef(image);
}

在主题2中:

receivedByConstRef(const QImage& image){
   ...
   pixmap = fromImage(image);
   ...
 }

由于信号槽正在通过const Ref传递QImage,这意味着没有复制发生,是否有可能在构建“pixmap”时,线程1中“图像”的生命周期结束并导致在线程2中构造“pixmap”失败。

1 个答案:

答案 0 :(得分:7)

当您通过引用传递参数时,将在排队连接中发送副本。实际上,当您有排队连接时,始终会复制参数。因此,图像的生命周期不会有任何问题,因为它将被复制而不是通过引用传递。