我团队的高级开发人员在我们的Qt应用程序中使用了传统的C-style callbacks,而不是使用Qt信号/插槽机制。
我的第一反应是替换他的代码并改用Qt信号/插槽。
在Qt应用程序/库中使用回调是否有充分的理由?
感谢。
答案 0 :(得分:18)
我认为更好的方法是接受你正在使用的框架并使用信号/插槽。
话虽如此,如果有问题的代码有效,并且不丑或造成问题,那么你最好不要管它。
咨询Signal/Slot documentation描述了信号/插槽方法更好的原因:
回调有两个基本缺陷: 首先,它们不是类型安全的。我们 永远不能确定 处理函数会调用 使用正确的参数回调。 其次,回调强烈 耦合到处理功能 因为处理功能必须 知道要回拨哪个回叫。
请注意以下事项:
与回调相比,信号和插槽稍微慢一点,因为它们提供了更高的灵活性
在大多数情况下,速度可能并不重要,但可能存在一些重复呼叫的极端情况会产生影响。
答案 1 :(得分:2)
您应该区分同步的回调并用于返回渐变结果或元组(多个项目,如对<>但更多)和回调是异步松散耦合。信号/插槽通常应该用于后者。对于前者,它可以有意义,取决于它是否是您的应用程序的主要功能(使用信号/插槽)或非GUI库的可以更便携的接口(使用普通C / C ++的直接回调便携式代码)。
通常,我有简洁的编程设计规则,往往指向最干净,代码/接口复杂度最低的任何东西。对于元组返回的情况,我经常使用QMap而不是创建另一个类定义或信号/槽或回调方法。这对于捆绑和传递参数也很有效,特别是对于需要在系统的不同部分进化的东西。