本文介紹的是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小結:qt中實現thread與gui主線程連通方法的內容介紹完了,在罈子裡逛了一圈,解決執行緒的問題還真不少,最後還是希望本文對你有幫助。#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主線程通訊的方法
目前只會一種,採用訊號槽機制。通常情況下,訊號和槽機制可以同步操作,這就意味著在發射訊號的時候,使用直接函式即可以立刻呼叫連線到乙個訊號上的多個槽。然而,當連線位於不同執行緒中的物件時,這一機制就會變得不同步起來,可以通過修改qobject connect 的第5個可選引數而改變。connect的第...
執行緒Thread與Runnable實現
當new 乙個thread的時候,就是在主線程的基礎上再開乙個子執行緒,cpu一會兒給主線程用,一會兒給子執行緒用,所以多執行緒會降低工作效率 1 thread 自己實現自己的run方法 public static voidmain string args throwsinterruptedexce...
保持Qt程式中GUI的響應流暢
如何使qt 平台中的gui保持響應流暢?一般來說耗時較長的操作,分為計算密集型操作和io密集型操作,對於這兩類操作如何提高響應速度。而從操作的本質上來說,操作又可分為不可分解操作,如在第三方庫中耗時較長的操作,以及可分解操作,其中可分解操作又可細分為序列操作和可並行操作,如何針對這幾類操作來提高響應...