My personal preference is to use the "move to thread" method, which is described here:

https://mayaposch.wordpress.com/2011...l-explanation/

Design your worker object the like a normal class that inherits QObject, add signals/slots necessary to communicate with your main GUI thread, etc. Qt will automatically do the right thing if you connect signals/slots across different threads. Qt::QueuedConnection is used if the sender and receiver are in different threads.