Qt多線程之間的信號傳遞

Qt 多線程信號傳遞

  1. QObject::connect(const QObject * sender, const char * signal, 
  2. const QObject * receiver, const char * method, 
  3. Qt::ConnectionType type = AutoConnection); 

這個函數默認(即最後一個參數type爲AutoConnection)情況下只能在相同線程下的不同類之間傳遞信號,若想要把信號傳遞給另外一個線程下運行的類實例,必須要修改type的枚舉值。

可以改爲Qt::QueuedConnection,這樣就能傳遞給其他線程下的類實例了。

另外,對於帶參數的消息,參數的數據類型必須爲Qt支持的元數據類型,如int、QString等,若要傳遞自定義的數據類型,必須把自定義的數據類型註冊爲元數據類型。

舉個例子,比如我再兩個線程下分別運行了兩個類實例MainWindow *mainWnd和Manager *mngr,MainWindow把方法addUsers(LPHOSTSTRUCT )設爲槽,Manager把方法NewUserCome(LPHOSTSTRUCT )設爲消息,其中LPHOSTSTRUCT爲自定義的數據類型。要是想在Manager中順利的使用emit NewUserCome(lpHost)(lpHost爲LPHOSTSTRUCT的一個實例),就要經過兩步

一、註冊LPHOSTSTRUCT爲Qt的元數據類型

  1. qRegisterMetaType<LPHOSTSTRUCT> ("LPHOSTSTRUCT"); 

二、調用QObject::connect方法,連接信號和槽,這裏要注意修改connect方法的第五個參數

  1. QObject::connect(mngr, SIGNAL(NewUserCome(LPHOSTSTRUCT)), mainWnd, SLOT(addUser(LPHOSTSTRUCT))); 

小結:Qt 多線程信號傳遞 實例的內容介紹完了,希望本文能幫你解決問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章