在Qt中,它们都是有效的,行为相同:
emit someSignal(value);
VS
emit(someSignal(value));
有什么不同吗?
答案 0 :(得分:9)
有什么不同吗?
除了外部括号之外没有其他区别,因此程序员会更喜欢它,而且它也更常用于Qt项目。
无差异的原因是由于:
# define emit
您可以看到此in the source code的定义。
因此,它基本上只是声明为"空"字符串和预处理器会将您的变体替换为:
someSignal(value);
或
(someSignal(value));
如果为了快速测试,您可以在运行预处理器后停止执行编译器,例如,在gcc的情况下-E
选项。
更多信息:评论中有人对emit关键字有疑问,因为它污染了全局宏命名空间。这是事实,但这是一种确保有一些共同的方式来做这件事的好方法。
另一方面,这不是强制性的,所以任何人都可以重新定义,取消定义,甚至将其关闭by telling Qt,不要使用如下关键字:
CONFIG += no_keywords
这样,仍然可以将Qt信号槽机制与Q_SIGNAL
,Q_SIGNALS
,Q_SLOT
,Q_SLOTS
,Q_EMIT
一起使用,这一切。
您可以在此处找到关于Q_EMIT
的{{3}},例如:
Q_EMIT
如果要将Qt信号和插槽与第三方信号/插槽机制一起使用,请使用此宏替换emit关键字以发出信号。
当使用.pro文件中的CONFIG变量指定no_keywords时,通常会使用该宏,但即使未指定no_keywords也可以使用它。
答案 1 :(得分:5)
没有区别。实际上,emit
被定义为空宏,所以只需
someSignal(value);
也是等同的。 emit
只会让您更明显地触发Qt信号。
答案 2 :(得分:1)
绝对没有区别。它是一个空的预处理器定义,因此在编译器看到代码之前就被删除了。就编译器而言,它甚至不存在。
它纯粹是为了程序员的利益而存在,让他/她知道在这一点上,可能会处理一个信号并且可能有助于调试代码。