Signals and slots
Signals and slots is a language construct introduced in Qt for communication between objects[1] which makes it easy to implement the Observer pattern while avoiding boilerplate code. The concept is that GUI widgets can send signals containing event information which can be received by other controls using special functions known as slots.
The signal/slot system fits well with the way Graphical User Interfaces are designed. Similarly, the signal/slot system can be used for other non-GUI usages, for example asynchronous I/O (including sockets, pipes, serial devices, etc.) event notification or to associate timeout events with appropriate object instances and methods or functions. It is easy to use and no registration/deregistration/invocation code need to be written, because Qt's Meta Object Compiler (MOC) automatically generates the needed infrastructure.
A commonly used metaphor is a spreadsheet. A spreadsheet has cells that observe the source cell(s). When the source cell is changed, the dependent cells are updated from the event.
Alternative implementations
There are some implementations of signal/slot systems based on C++ templates, which don't require the extra Meta Object Compiler, as used by Qt, such as libsigc++, sigslot, nano-signal-slot, neosigslot, Signals, boost.signals2, Cpp::Events, Platinum and JBroadcaster. CLI languages such as C# also supports a similar construct although with a different terminology and syntax: events play the role of signals, and delegates are the slots. Another implementation of signals exists for ActionScript 3.0, inspired by C# events and signals/slots in Qt. Additionally, a delegate can be a local variable, much like a function pointer, while a slot in Qt must be a class member declared as such. Due to the language limitation, there isn't a common implementation for ANSI C, but an environment dependent method was given out, see c-sigslot, it has been tested on several platforms, notably the ARM C Compiler, but should support any standard ANSI C compiler. The C based GObject system also provides similar functionality via GSignal.
See also
References
- ↑ "Signals & Slots - QtCore 5.1". Qt Project. 2013-07-04. Retrieved 2013-07-04.
|