Qt有一套完整而独特的设计理念,其signal-slot机制需要有QEventLoop支持。
由于Qt4.4对QThread类进行了大改,把它的run()方法从纯虚函数变成了默认调用exec()。这让仅提供消息循环的线程不再需要派生QThread。但网上搜QThread会有大量古老参考资料,提供了很多不友好的写法。以至于Qt开发人员Bradley T. Hughes愤怒地写了一篇《you are-doing-it-wrong》 (TrollTech网站已经倒了,链接失效了)来批判错误写法们。
现行的准官方的推荐实践是(在线程里有消息循环的情况下)

定义一个普通的QObject派生类,然后将其对象move到QThread中。使用信号和槽时根本不用考虑多线程的存在。也不用使用QMutex来进行同步,Qt的事件循环会自己自动处理好这个。

具体请参考这篇:《Qt 的线程与事件循环》