QT子线程与主线程的信号槽通信
生活随笔
收集整理的這篇文章主要介紹了
QT子线程与主线程的信号槽通信
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
? ? ? 最近用QT做一個服務器,眾所周知,QT的主線程必須保持暢通,才能刷新UI。所以,網(wǎng)絡通信端采用新開線程的方式。在涉及到使用子線程更新Ui上的控件時遇到了點兒麻煩。網(wǎng)上提供了很多同一線程不同類間采用信號槽通信的方式,但是并不完全適合線程間的信號槽通信,這主要體現(xiàn)在自定義消息的傳遞上。
首先我們看看一般的方式:
testthread.h 文件
[cpp]?view plaincopy print?
testthread.cpp文件
[cpp]?view plaincopy print?
自己定義的類繼承了QThread類,重寫run函數(shù),然后觸發(fā)TestSignal信號。
mainwindow.h
[cpp]?view plaincopy print?
mainwindow.cpp
[cpp]?view plaincopy print?
Mainwindow里面連接信號槽,并且將收到的int參數(shù)顯示在界面上。
運行效果
下面我們對程序進行一些簡單,修改,使得它傳輸我們的自定義消息。
testthread.h 文件
[cpp]?view plaincopy print?
testthread.h 文件
[cpp]?view plaincopy print?
mainwindow.h 文件
[cpp]?view plaincopy print?
mainwindow.cpp 文件
[cpp]?view plaincopy print?
此時再進行編譯,能夠通過,但是Qt Creator會有提示
[cpp]?view plaincopy print?
并且運行程序,不會有任何反應。
mainwindow.cpp文件 改動為
[cpp]?view plaincopy print?
此時能夠正常運行
說明:
在線程間使用信號槽進行通信時,需要注意必須使用元數(shù)據(jù)類型
Qt內(nèi)生的元數(shù)據(jù)類型,如int double QString 等
如果要用自己定義的數(shù)據(jù)類型,需要在connect前將其注冊為元數(shù)據(jù)類型。形式見代碼。
總結
以上是生活随笔為你收集整理的QT子线程与主线程的信号槽通信的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dnf带人领主要给钱吗我要给他吗
- 下一篇: 成都大熊猫繁育基地靠近哪个地铁站