1. 需求點
例如mfc程序,或者有些程序主線程已經被隱藏。這時候,如果我們在次線程使用qt的信號槽(例如使用Qtcpserver),那麼信號槽是無法響應的。
2. 原因
信號槽要存儲入事件隊列後,在事件循環(一般是main函數的return a.exec())執行時,纔可能響應。但是主線程因爲沒有事件循環,所以槽函數無法響應。
而且我們也不能在主線程執行return a.exec()。因爲這句幾乎就是個死循環。
3. 解決方法
QThread的解決方法我沒有找到。但是使用std::thread的方法我試驗成功了(windows,linux的線程api也類似)。在線程入口函數(假定命名爲funEntrance)的初始,要創建QCoreApplication a;。在funEntrance的結尾要調用a.exec();即可。
4. 其它
qt官方論壇forum.qt.io比較給力。我在上面提的問題都有比較熱心的迴應。