Qt 中多線程信號傳遞 實例
Qt 多線程的信號傳遞
- QObject::connect(const QObject * sender, const char * signal,
- const QObject * receiver, const char * method,
- 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的元數據類型
- qRegisterMetaType<LPHOSTSTRUCT> ("LPHOSTSTRUCT");
二、調用QObject::connect方法,連接信號和槽,這里要注意修改connect方法的第五個參數
- QObject::connect(mngr, SIGNAL(NewUserCome(LPHOSTSTRUCT)), mainWnd, SLOT(addUser(LPHOSTSTRUCT)));
小結:Qt 中多線程信號傳遞 實例的內容介紹完了,希望本文能幫你解決問題。