tutorial custom and c++ qt callback

c++ - custom - qt signals and slots tutorial



¿Debo usar los mecanismos de señal/ranura de Qt sobre las devoluciones de llamada tradicionales? (2)

Un desarrollador senior de mi equipo usó devoluciones de llamada estilo C tradicionales en nuestra aplicación Qt en lugar de utilizar los mecanismos Qt de señal / ranura.

Mi primer reflejo sería reemplazar su código y usar Qt signal / slot en su lugar.

¿Hay alguna buena razón para usar devoluciones de llamada en una aplicación / biblioteca de Qt?

Gracias.


Debe distinguir entre las devoluciones de llamada que son sincrónicas y que se utilizan para devolver resultados o tuplas graduales (elementos múltiples, como par <> pero más) y devoluciones de llamada que son un acoplamiento suelto asíncrono. Las señales / ranuras generalmente deberían usarse para este último. Para el primero, puede tener sentido de cualquier manera dependiendo de si es una función principal de su aplicación (use señales / ranuras) o la interfaz de una biblioteca que no sea GUI que podría ser más portátil (use devoluciones de llamada directas para C / C ++ simple código portable).

En general, tengo reglas de diseño de programación concisas que tienden a apuntar a lo que es más limpio y menos complejo de código / interfaz. Para el caso de devolución de tuplas, a menudo uso QMap en lugar de crear otra definición de clase o señal / ranura o método de devolución de llamada. Esto funciona bien para agrupar y pasar parámetros también, especialmente para cosas que necesitan evolucionar en diferentes partes del sistema.


Creo que el mejor enfoque sería abrazar el marco que está utilizando y usar señales / ranuras.

Dicho eso, si el código en cuestión funciona, y no es feo ni causa problemas, entonces es mejor que lo deje en paz.

Consultar la documentación de Signal / Slot describe por qué el enfoque Signal / Slot es mejor:

Las retrollamadas tienen dos defectos fundamentales: en primer lugar, no son seguros para el tipo. Nunca podemos estar seguros de que la función de procesamiento llamará a la devolución de llamada con los argumentos correctos. En segundo lugar, la devolución de llamada está fuertemente acoplada a la función de procesamiento, ya que la función de procesamiento debe saber a qué devolución de llamada llamar.

Tenga en cuenta lo siguiente:

En comparación con las devoluciones de llamada, las señales y las ranuras son ligeramente más lentas debido a la mayor flexibilidad que proporcionan

La velocidad probablemente no importe en la mayoría de los casos, pero puede haber algunos casos extremos de llamadas repetidas que hagan la diferencia.