stringtranslate.com

Señales y ranuras

Signals and slots es una construcción del lenguaje introducida en Qt [1] para la comunicación entre objetos, lo que facilita la implementación del patrón de observador y evita el código repetitivo . El concepto es que los widgets de la GUI y otros objetos pueden enviar señales que contienen información de eventos que pueden ser recibidos por otros objetos mediante funciones miembro especiales conocidas como slots. Esto es similar a los punteros de función de C/C++, pero el sistema de señales/slots garantiza la corrección de tipos de los argumentos de devolución de llamada. [ cita requerida ]

El sistema de señal/ranura se adapta bien a la forma en que se diseñan las interfaces gráficas de usuario . [ cita requerida ] De manera similar, el sistema de señal/ranura se puede utilizar para otros usos no relacionados con la GUI, por ejemplo, notificación de eventos de E/S asíncrona (incluidos sockets, tuberías, dispositivos seriales, etc.) o para asociar eventos de tiempo de espera con instancias de objetos y métodos o funciones apropiados. Es fácil de usar y no es necesario escribir código de registro/desregistro/invocación, porque el compilador de metaobjetos (MOC) de Qt genera automáticamente la infraestructura necesaria.

Se podría implementar un sistema de actualización de programas de hojas de cálculo utilizando señales y ranuras de tal manera que cuando se cambia una celda, sus celdas dependientes sean notificadas/actualizadas.

Implementaciones alternativas

Existen algunas implementaciones de sistemas de señales/ranuras basadas en plantillas C++ , que no requieren el compilador de metaobjetos adicional, como el que utiliza Qt, como libsigc++ , sigslot, vdk-signals, nano-signal-slot, neosigslot, Signals, boost.signals2, Synapse, Cpp::Events, Platinum, JBroadcaster y KDBindings. Los lenguajes de Common Language Infrastructure (CLI) como C# también admiten una construcción similar aunque con una terminología y sintaxis diferentes: los eventos desempeñan el papel de señales y los delegados son las ranuras. Existe otra implementación de señales para ActionScript 3.0, inspirada en los eventos y señales/ranuras de C# en Qt. Además, un delegado puede ser una variable local, como un puntero de función , mientras que una ranura en Qt debe ser un miembro de clase declarado como tal. El sistema GObject basado en C también proporciona una funcionalidad similar a través de GSignal. En D se implementa mediante std.signals.

Véase también

Bibliotecas

Java: sig4j: multiproceso, seguro para tipos, basado en la anotación FunctionalInterface introducida en Java 8.

C++: vdk-signals: seguro para subprocesos y tipos, escrito en C++11 con variables atómicas.

Referencias

  1. ^ "Señales y ranuras - QtCore 5.1". Proyecto Qt. 2013-07-04 . Consultado el 2013-07-04 .