There is an old saying, with great power comes great responsibility. Using multiple threads gives you great power to solve problems, but it also brings great responsibility to not introduce cross-thread problems.
The first thing we will learn about is synchronization between threads using Qt's support for mutexes and semaphores. That rolls directly into a more specialized type of synchronization, protecting data from corruption as it is accessed from multiple threads. We will then learn about using Qt signals and slots to communicate between threads, and then finally we finish off discussing Qt GUI objects and their limitations in regards to threads.