我应该使用Qt信号/插槽机制而不是传统的回调吗?

Eti*_*ard 8 c++ qt callback

我团队的一名高级开发人员在我们的Qt应用程序中使用了传统的C风格回调,而不是使用Qt信号/插槽机制.

我的第一反应是替换他的代码并使用Qt信号/插槽代替.

有没有什么好的理由在Qt应用程序/库中使用回调?

谢谢.

Bri*_*ndy 19

我认为更好的方法是接受你正在使用的框架并使用信号/插槽.

话虽这么说,如果有问题的代码有效,并且不丑或引起问题,那么你最好不要管它.

咨询Signal/Slot文档描述了Signal/Slot方法更好的原因:

回调有两个根本缺陷:第一,它们不是类型安全的.我们永远无法确定处理函数是否会使用正确的参数调用回调.其次,回调强烈耦合到处理函数,因为处理函数必须知道要调用哪个回调.

请注意以下事项:

与回调相比,信号和插槽稍微慢一些,因为它们提供了更大的灵活性

在大多数情况下,速度可能无关紧要,但可能存在一些重复呼叫的极端情况会产生影响.

  • 文档并不准确.除非使用reinterpret_casts,否则回调实际上是类型安全的.使用reinterpret_casts,信号/插槽也不是类型安全的.处理函数当然不需要知道要调用哪个回调.事实上,最常见的回调实现没有 - 调用者为回调传递一个函数指针. (10认同)
  • +1既包含框架又保留原样. (2认同)