1.'Thread' does not name a type
錯誤在于:頭檔案互相包含
2. QTcpSocket不能跨線程通路
比如說我在子線程的構造函數對其成員QTcpSocket進行了執行個體化,然後在其run()函數中進行操作;
運作時一般會出現如下資訊:
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QNativeSocketEngine(0xadc00df0), parent*s thread is QThread(0x81c0298), current thread is QThread(0x806e000)
如果在構造函數中執行個體化了QTcpSocket,則該對象将屬于調用該子線程的對象而非子線程本身;
解決: 不要在構造函數中執行個體化,而是在子線程的run()函數中執行個體化并操作,這樣才屬于子線程本身。
3.不能跨線程調用Q_OBJECT
運作時出現如下資訊:
QSocketNotifier: socket notifiers cannot be enabled from another thread.
原因在于不能跨線程調用Q_OBJECT,隻要使用了信号槽機制就不能跨線程通路;
注意QT中界面線程是主線程,其他建立的QThread,隻要使用了Q_OBJECT,就不能跨線程通路。
這裡延伸出一個問題:
如果不使用Qt的信号槽機制,能跨線程通路嗎?當然是可以的。
但QTcpSocket步行,原因在于QTcpSocket本身就使用了信号槽機制。
4.錯誤:QApplication: Object event filter cannot be in a different thread.
不要在子線程中處理UI,官網警告過