在Qt中,它们都是有效的,并且行为相同:
emit someSignal(value);
与
emit(someSignal(value));
有什么区别吗?
有什么区别吗?
除了不需要多余的括号外,没有什么区别,因此程序员会更喜欢这一点,并且它在Qt项目中也更常规地使用。
无差异的原因是由于以下原因:
# define emit
您可以在源代码中看到其定义。
因此,它基本上只是声明为“空”字符串,预处理器将替换您的变体以:
someSignal(value);
或者
(someSignal(value));
如果要进行快速测试,如果在运行预处理程序后停止执行编译器(例如-E
,使用gcc的选项),则可以自己查看。
进一步的信息:评论中的某人对send关键字有疑问,因为它污染了全局宏名称空间。的确是这样,但这是确保以某种通用的方式这样做的好方法,这是一件好事。
另一方面,这不是强制性的,因此任何人都可以通过告诉Qt不要使用关键字来重新定义,取消定义甚至关闭它,如下所示:
CONFIG += no_keywords
这样一来,它仍然有可能使用Qt的信号槽机制Q_SIGNAL
,Q_SIGNALS
,Q_SLOT
,Q_SLOTS
,Q_EMIT
和所有。
在这里,你可以找到相应的文件有关Q_EMIT
,例如:
Q_EMIT
当您要通过第三方信号/插槽机制使用Qt信号和插槽时,请使用此宏替换发出信号的关键词。
通常在.pro文件中使用CONFIG变量指定no_keywords时使用该宏,但是即使未指定no_keywords时也可以使用该宏。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句