Qt 訊號和槽

2021-07-23 05:30:19 字數 1090 閱讀 1961

函式原型:

qobject::connect(const qobject * sender, const char * signal, const qobject * receiver, const char * method, qt::connectiontype type = qt::autoconnection)

通常使用的connect,實際上最後乙個引數使用的是qt::autoconnection型別:qt支援6種連線方式,其中3中最主要:

1.qt::directconnection(直連方式)(訊號與槽函式關係類似於函式呼叫,同步執行)

當訊號發出後,相應的槽函式將立即被呼叫。emit語句後的**將在所有槽函式執行完畢後被執行。

2.qt::queuedconnection(排隊方式)(此時訊號被塞到訊號佇列裡了,訊號與槽函式關係類似於訊息通訊,非同步執行)

當訊號發出後,排隊到訊號佇列中,需等到接收物件所屬執行緒的事件迴圈取得控制權時才取得該訊號,呼叫相應的槽函式。emit語句後的**將在發出訊號後立即被執行,無需等待槽函式執行完畢。

3.qt::autoconnection(自動方式)

qt的預設連線方式,如果訊號的發出和接收這個訊號的物件同屬乙個執行緒,那個工作方式與直連方式相同;否則工作方式與排隊方式相同。

4.qt::blockingqueuedconnection(訊號和槽必須在不同的執行緒中,否則就產生死鎖)

這個是完全同步佇列只有槽執行緒執行完成才會返回,否則傳送執行緒也會一直等待,相當於是不同的執行緒可以同步起來執行。

5.qt::uniqueconnection

與預設工作方式相同,只是不能重複連線相同的訊號和槽,因為如果重複連線就會導致乙個訊號發出,對應槽函式就會執行多次。

6.qt::autocompatconnection

是為了連線qt4與qt3的訊號槽機制相容方式,工作方式與qt::autoconnection一樣。

如果這個引數不設定的話,預設表示的是那種方式呢?

沒加的話與直連方式相同:當訊號發出後,相應的槽函式將立即被呼叫。emit語句後的**將在所有槽函式執行完畢後被執行。在這個執行緒內是順序執行、同步的,但是與其它執行緒之間肯定是非同步的了。如果使用多執行緒,仍然需要手動同步。

Qt訊號和槽

qt將訊號和槽關聯起來的connect使用時需要注意帶相應的引數,否則會出現訊號發出後不能呼叫槽的問題,例子如下 發出訊號的宣告 signals void receiveddata uchar dat,uint len 接收訊號的槽宣告 private slots void getdata ucha...

QT訊號和槽

qt訊號和槽 訊號和槽是一種高階介面,應用於物件之間的通訊,它是 qt 的核心特性。要正確的處理訊號和槽,必須借助乙個稱為 moc meta object compiler 的 qt 工具,該工具是乙個 c 預處理程式,它為高層次的事件處理自動生成所需要的附加 訊號和槽能攜帶任意數量和任意型別的引數...

Qt 訊號和槽

訊號的宣告 signals void statechanged int nnewval 訊號函式滿足以下約束 gui視窗控制項 例如按鈕 標籤 列表 編輯框等等 都預先定義好了若干訊號,比如單擊按鈕就會發出 clicked 訊號,還有諸如雙擊 doubleclicked 進入 entered 按下 ...