我在myapp中定义了一个信号,并在代码中的不同位置发出信号,但是当我的MY_DEFINED_FLAG被定义时我需要它,我的问题是:
我应该改变每一个:
emit mySignal();
到
#ifdef MY_DEFINED_FLAG
emit mySignal();
#endif
如果答案是“是”那么,是否有更好的主意?
答案 0 :(得分:2)
发出信号的班级不应该关心是否有人听。如果需要或不需要,该类用户将连接到信号。也许他们只需要连接到其中一些。对于没有人连接的信号没有任何伤害,呼叫本身便宜。 它与API的其他部分一样:信号是界面设计的一部分,是类提供给用户的服务,用户可以使用这部分API,也可以不使用,这是他们自己的业务。
答案 1 :(得分:1)
发出未连接到任何接收器/插槽的信号是完全无害的(除非您可能过分担心性能,但发出信号的情况非常便宜)。
如果在代码中有一些用于调试的信号,那么在编译时禁用某些信号(使用预处理指令,如您所建议的那样)可能是唯一的保证,您不希望在最终版本中发出这些信号。 / p>
答案 2 :(得分:1)
不,发出已断开连接的信号也不错,完全可以预料到。 Qt本身一直这样做。
在这种情况下,我只将连接放在#ifdef中,或者理想情况下,只是在这样的内容中:
if (MY_DEFINED_FLAG)
connect(this, SIGNAL(mySignal()), this, SLOT(mySlot());