QT中實現Thread與GUI主線程連通方法

2021-07-05 02:39:40 字數 1493 閱讀 6146

本文介紹的是qt中實現thread與gui主線程通,目前只會一種,採用訊號槽機制。

通常情況下,訊號和槽機制可以同步操作,這就意味著在發射訊號的時候,使用直接函式即可以立刻呼叫連線到乙個訊號上的多個槽。然而,當連線位於不同執行緒中的物件時,這一機制就會變得不同步起來,可以通過修改qobject::connect()的第5個可選引數而改變。

connect的第五個引數qt::queuedconnection表示槽函式由接受訊號的執行緒所執行,如果不加表示槽函式由發出訊號的次執行緒執行。當傳遞訊號的引數型別不是qt的元型別時要先註冊,關於qt的元型別可以參看qt文件

qmetatype這個類裡面列舉了所有的元型別。

以qstring為例,註冊時首先q_declare_metatype(qstring);然後,int id=qregistermetatype("qstring");加上這兩句就註冊成功了。

貼個示例的**,次執行緒不斷更改乙個qstring傳給gui主線程,主線程在gui介面上顯示。

mythread.h  

#ifndef mythread_h  

#define mythread_h  

#include 

<

qthread

>

class mythread : public qthread  

;  #endif // mythread_h  

widgett.h  

#ifndef widgett_h  

#define widgett_h  

#include 

<

qtgui

/qmainwindow

>

#include "ui_widgett.h"  

class widgett : public qmainwindow  

;  #endif // widgett_h  

mythread.cpp  

#include "mythread.h"  

mythread::mythread()  

: qthread()  

mythread::~mythread()  

void mythread::run()  

}  widgett.cpp  

#include "widgett.h"  

#include "mythread.h"  

q_declare_metatype(qstring);  

widgett::widgett(qwidget *parent, qt::wflags flags)  

: qmainwindow(parent, flags)  

widgett::~widgett()  

void widgett::labelsettext(qstring qstr) 

小結:qt中實現thread與gui主線程連通方法的內容介紹完了,在罈子裡逛了一圈,解決執行緒的問題還真不少,最後還是希望本文對你有幫助。

QT中實現Thread於GUI主線程通訊的方法

目前只會一種,採用訊號槽機制。通常情況下,訊號和槽機制可以同步操作,這就意味著在發射訊號的時候,使用直接函式即可以立刻呼叫連線到乙個訊號上的多個槽。然而,當連線位於不同執行緒中的物件時,這一機制就會變得不同步起來,可以通過修改qobject connect 的第5個可選引數而改變。connect的第...

執行緒Thread與Runnable實現

當new 乙個thread的時候,就是在主線程的基礎上再開乙個子執行緒,cpu一會兒給主線程用,一會兒給子執行緒用,所以多執行緒會降低工作效率 1 thread 自己實現自己的run方法 public static voidmain string args throwsinterruptedexce...

保持Qt程式中GUI的響應流暢

如何使qt 平台中的gui保持響應流暢?一般來說耗時較長的操作,分為計算密集型操作和io密集型操作,對於這兩類操作如何提高響應速度。而從操作的本質上來說,操作又可分為不可分解操作,如在第三方庫中耗時較長的操作,以及可分解操作,其中可分解操作又可細分為序列操作和可並行操作,如何針對這幾類操作來提高響應...