在Qt中,它们都是有效的,并且行为相同:

emit someSignal(value);

vs的

emit(someSignal(value));

有什么区别吗?

有帮助吗?

解决方案

有什么区别吗?

除了外部支架是不必要的之外,没有任何区别,所以程序员会更喜欢它,而且它也更常用于Qt项目。

没有差异的原因是由于这一点:

# define emit

你可以看到这个的定义 在源代码中.

因此,它基本上只是声明为"空"字符串,预处理器将替换您的变体为:

someSignal(value);

(someSignal(value));

如果为了快速测试,在预处理器运行后停止编译器的执行,例如,您可以自己看到这一点。该 -E gcc的情况下的选项。

进一步资料:评论中有人对emit关键字有疑问,因为它污染了全局宏命名空间。这是真的,但这是一个很好的方法,以确保有一些共同的方式做到这一点,这是一件好事。

另一方面,这不是强制性的,所以任何人都可以重新定义,取消定义,甚至关闭它 通过告诉Qt 不使用关键字如下:

CONFIG += no_keywords

这样,仍然可以使用Qt信号槽机制 Q_SIGNAL, Q_SIGNALS, Q_SLOT, Q_SLOTS, Q_EMIT 还有所有这些。

在这里你可以找到 相应文档 关于 Q_EMIT, ,例如:

Q_EMIT

当您想使用Qt信号和具有第三方信号/插槽机制的插槽时,请使用此宏替换发射信号的emit关键字。

通常在.pro文件中使用CONFIG变量指定no_keywords时使用该宏,但即使未指定no_keywords也可以使用该宏。

其他提示

没有区别。事实上, emit 被定义为空宏,所以只

someSignal(value);

也是等价的。该 emit 只是让它更明显你正在触发Qt信号。

绝对没有区别。它是一个空预处理器定义,因此在编译器才能看到代码之前被删除。就编制者而言,它甚至没有存在。

它纯粹是为了程序员的好处,让他/她知道,在那一点上,可能会处理信号,并可能有助于调试代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top