Slots and Signals in Qt


A slot is a member function defined in a class. The rules for calling a slot are the same as normal member functions, and they are invoked directly by any component. A slot can also be invoked indirectly by a signal-slot connection. In this way, a signal emitted from an arbitrary class can cause a private slot in an unrelated class to be invoked. In addition, a slot can be declared to be virtual.


In Qt, we can use signals and slots to communicate between objects. This construct makes it easy to implement the observer pattern without the need to write boilerplate code. For example, we can create a window and set its current value to a specified value. This makes it easy to switch between windows and use different configurations for different objects.

As a result, signals and slots are slightly slower than callbacks. For example, emitting a signal that is connected to a slot is about ten times slower than calling receivers directly. This is due to the overhead required to find the connection object, safely iterate over all connections, and marshall the parameters. However, this overhead is much lower than any other operation.

Signals and slots have a very low overhead. Compared to the cost of making system calls, they cost only a small amount. Additionally, they are flexible and simple, and are well worth it. The signal-to-slot connection is defined in a class holding the reference to the sender and receiver.

As with signals, the slot can have any number of arguments. A slot can ignore any or all of these arguments. The order of the arguments is defined by the slot-to-signal relationship. The signal is connected to the slot by calling its connect() method. This connection can be broken only if both signals and slots have the same type of arguments.

You can also use function pointers instead of the SIGNAL/SLOT macros. However, you must explicitly specify the type of the function pointer. As a result, auto is useless in this case. As a result, you cannot specify overloaded methods with function pointers. Nevertheless, it is an easy way to specify how to use signal and slot in a function.

Signals and slots are used in Qt code to communicate between objects. They simplify implementing the observer pattern and allow you to avoid boilerplate code. And since these are public access functions, they are usually called from a class that defines them. This makes the implementation of the observer pattern extremely flexible and simple.

The following code demonstrates how to create a class with a slot and signal. The CS_SIGNAL() and CS_SLOT() macros are used to define the methods and register their parameters. A single class can have multiple instances of these, each with its own signal and slot. There are many other useful methods for creating a signal and a slot.

In GSM and DCS, the mobile stations may exchange information in a slot tuned to a broadcast channel, such as handovers to neighboring cells. Similarly, in a TDMA system, they may exchange information in a slot tuned to a different frequency. The handset needs to be tuned to one of these frequencies in order to properly receive a signal.