发出断开的信号是不是很糟糕?

时间:2010-07-23 06:11:19

标签: qt qt4 signals

我在myapp中定义了一个信号,并在代码中的不同位置发出信号,但是当我的MY_DEFINED_FLAG被定义时我需要它,我的问题是:
我应该改变每一个:

emit mySignal();

#ifdef MY_DEFINED_FLAG
emit mySignal();
#endif

如果答案是“是”那么,是否有更好的主意?

3 个答案:

答案 0 :(得分:2)

发出信号的班级不应该关心是否有人听。如果需要或不需要,该类用户将连接到信号。也许他们只需要连接到其中一些。对于没有人连接的信号没有任何伤害,呼叫本身便宜。 它与API的其他部分一样:信号是界面设计的一部分,是类提供给用户的服务,用户可以使用这部分API,也可以不使用,这是他们自己的业务。

答案 1 :(得分:1)

发出未连接到任何接收器/插槽的信号是完全无害的(除非您可能过分担心性能,但发出信号的情况非常便宜)。

如果在代码中有一些用于调试的信号,那么在编译时禁用某些信号(使用预处理指令,如您所建议的那样)可能是唯一的保证,您不希望在最终版本中发出这些信号。 / p>

答案 2 :(得分:1)

不,发出已断开连接的信号也不错,完全可以预料到。 Qt本身一直这样做。

在这种情况下,我只将连接放在#ifdef中,或者理想情况下,只是在这样的内容中:

if (MY_DEFINED_FLAG)
    connect(this, SIGNAL(mySignal()), this, SLOT(mySlot());