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