Setting callbacks for button clicks and text changes is a common and very obvious use for signals and slots, but it is really only the beginning. At its core, the signals and slots mechanism can be seen as a way for any two objects in an application to communicate while remaining loosely coupled.
Loose coupling refers to keeping the amount of information two objects need to know about each other to a minimum. It's an essential trait to preserve when designing large, complex applications because it isolates code and prevents inadvertent breakage. The opposite is tight coupling, where one object's code depends heavily on the internal structures of another.
In order to take full advantage of this functionality, we'll need to learn how to create our own custom signals and slots.