1. 程式人生 > >Qt 筆記:訊號與槽的連線方式

Qt 筆記:訊號與槽的連線方式

深入訊號與槽的連線方式

-Qt::DirectConnection(立即呼叫)

-Qt::QueuedConnection(非同步呼叫)

-Qt::BlockingQueuedConnection(同步呼叫)

-Qt::AutoConnection(預設連線)

-Qt::UniqueConnection(單一連線)

bool connect(const QObject* sender,
             const char* signal,
             const QObject* receiver,
             const char* method,
             Qt::ConnectionType type = Qt::AutoConnection);

Qt::DirectConnection(立即呼叫)

-直接在傳送訊號的執行緒中呼叫槽函式,等價於槽函式的實時呼叫!

Qt::QueuedConnection(非同步呼叫)

-訊號傳送至目標執行緒的事件佇列,由目標執行緒處理;當前執行緒繼續向下執行!

Qt::BlockingQueuedConnection(同步呼叫)

-訊號傳送至目標執行緒的事件佇列,由目標執行緒處理;當前執行緒等待槽函式返回,之後繼續向下執行!

ps:目標執行緒和當前執行緒必須不同

Qt::AutoConnection(預設連線)

-根據傳送訊號與接收訊號物件的執行緒翻譯成DirectConnection,或者QueuedConnection。

-AutoConnection是connect函式第五個引數的預設值,也是工程中最常用的連線方式

Qt::UniqueConnection(單一連線)

·功能與AutoConnection相同,自動確定連線型別

·同一個訊號與同一個槽函式之間只有一個連線

ps:預設情況下,同一個訊號可以多次連線到同一個槽函式,多次連線意味著通過一個槽函式的多次呼叫

總結:

-訊號與槽的連線存在多種方式

-立即呼叫方式等價於槽函式的實時呼叫

-預設方式自動確定連線型別

-同步方式中的目標執行緒和當前執行緒必須不同

-單一連線方式確保同一個訊號與同一個槽之間只有一個連線