? ? ? 最近用QT做一個服務器,眾所周知,QT的主線程必須保持暢通,才能刷新UI。所以,網絡通信端采用新開線程的方式。在涉及到使用子線程更新Ui上的控件時遇到了點兒麻煩。網上提供了很多同一線程不同類間采用信號槽通信的方式,但是并不完全適合線程間的信號槽通信,這主要體現在自定義消息的傳遞上。
首先我們看看一般的方式:
testthread.h 文件
testthread.cpp文件
自己定義的類繼承了QThread類,重寫run函數,然后觸發TestSignal信號。
mainwindow.h
mainwindow.cpp
Mainwindow里面連接信號槽,并且將收到的int參數顯示在界面上。
運行效果
下面我們對程序進行一些簡單,修改,使得它傳輸我們的自定義消息。
testthread.h 文件
testthread.h 文件
mainwindow.h 文件
mainwindow.cpp 文件
此時再進行編譯,能夠通過,但是Qt Creator會有提示
并且運行程序,不會有任何反應。
mainwindow.cpp文件 改動為
此時能夠正常運行
說明:
在線程間使用信號槽進行通信時,需要注意必須使用元數據類型
Qt內生的元數據類型,如int double QString 等
如果要用自己定義的數據類型,需要在connect前將其注冊為元數據類型。形式見代碼。