Signals are just callbacks. When you make a connection you tell the emitting object: "when such and such event happens on your side, call this method on this object". The emitting object maintains a list of callbacks for each event/signal type and calls them all when the event happens. It's as simple as that.