QThread與其他執行緒間相互通訊

2021-05-23 09:26:14 字數 1201 閱讀 1669

qthread的用法其實比較簡單,只需要派生乙個qthread的子類,實現其中的run虛函式就大功告成, 用的時候建立該類的例項,呼叫它的start方法即可。但是run函式使用時有一點需要注意,即在其中不能建立任何gui執行緒(諸如新建乙個qwidget或者qdialog)。如果要想通過新建的執行緒實現乙個gui的功能,那麼就需要通過使用執行緒間的通訊來實現。這裡使用乙個簡單的例子來理解一下 qthread中signal/slot的相關用法。

首先,派生乙個qthread的子類 

mythread.h

view plaincopy to clipboardprint?

class mythread: public qthread  

;  

void send(qstring s)就是定義的訊號

mythread.cpp

view plaincopy to clipboardprint?

#include "mythread.h"  

mythread::mythread()  

void mythread::run()  

exec();  

}  

emit send("this is the son thread") 為發射此訊號,在run中迴圈傳送,每次休眠五秒

之後我們需要在另外的執行緒中定義乙個slot來接受mythread發出的訊號。如新建乙個mywidget

mywidget .h

view plaincopy to clipboardprint?

class mywidget : public qwidget ;  

void receiveslot(qstring s)就用來接受發出的訊號,並且實現引數的傳遞。

mywidget .cpp

view plaincopy to clipboardprint?

#include "mywidget.h"  

mywidget::mywidget(qwidget *parent) :qwidget(parent)  

mywidget::~mywidget()  

void mywidget::receiveslot(qstring s)  

接受函式實現彈出發送訊號中所含引數(qstring型別)的訊息框

在main()函式中建立新執行緒,來實現兩個執行緒間的互動。

main.cpp

QThread與其他執行緒間相互通訊

qthread的用法其實比較簡單,只需要派生乙個qthread的子類,實現其中的run虛函式就大功告成,用的時候建立該類的例項,呼叫它的start方法即可。但是run函式使用時有一點需要注意,即在其中不能建立任何gui執行緒 諸如新建乙個qwidget或者qdialog 如果要想通過新建的執行緒實現...

QThread與其他執行緒間相互通訊

qthread的用法其實比較簡單,只需要派生乙個qthread的子類,實現其中的run虛函式就大功告成,用的時候建立該類的例項,呼叫它的start方法即可。但是run函式使用時有一點需要注意,即在其中不能建立任何gui執行緒 諸如新建乙個qwidget或者qdialog 如果要想通過新建的執行緒實現...

C 泛型與其他型別的相互轉換

泛型類及型別轉換 泛型類 public class mytemplate t 設計乙個泛型類 public void t s 內容相連或者相加 else if s is string 字串相連 else if s is double 浮點數相加 else if s is bool bool型求或 p...