connect的第五個引數

2021-09-27 06:39:08 字數 947 閱讀 2272

qt是乙個gui框架,在gui程式中,主線程也叫gui執行緒,因為它是唯一被允許執行gui相關操作的執行緒。對於一些耗時的操作,如果放在主線程中,就是出現介面無法響應的問題。

qelapsedtimer et;  

et.start();

while(et.elapsed()<300)

解決方法二:採用多執行緒,將需要處理的後台資料放入子執行緒,為了能夠跨執行緒呼叫,一種方法是使用類似執行緒鎖對執行緒進行保護,另外一種方法使用qt的訊號槽機制。qt的訊號槽機制採用connect函式進行連線,connect函式其實是有第五個引數的,但這個引數往往在多執行緒呼叫中才會用到:

**connect(sender,signal(signal),receiver,slot(slot),qt::directconnection);**
connect()第五個引數的作用,指定連線方式:預設,佇列,直接自動連線(autoconnection),預設的連線方式,如果訊號與槽,也就是傳送者與接受者在同一執行緒,等同於直接連線;如果傳送者與接受者處在不同執行緒,等同於佇列連線。

單一連線(queuedconnection)

qt::uniqueconnection:這個flag可以通過按位或(|)與以上四個結合在一起使用。當這個flag設定時,當某個訊號和槽已經連線時,再進行重複的連線就會失敗。也就是避免了重複連線

如果槽函式中有耗時操作,比如說while迴圈,主線程的訊號子執行緒是不會響應的,除非使用直接連線(directconnection),connect(this, &controller::kill, worker,&worker::stopwork, qt::directconnection);,此時,槽函式工作於主線程。

QT connect 第五個引數

qt autoconnection 自動連線 為預設值,訊號與槽函式在同乙個執行緒,等同於qt directconnection 在不同執行緒,等同於qt queuedconnection。qt blockingqueuedconnection 阻塞佇列連線 與qt queuedconnection...

第五個議題

在每個問題後面,請說明哪一章節的什麼內容引起了你的提問,提供一些上下文 列出一些事例或資料,支援你的提問 說說你提問題的原因,你說因為自己的假設和書中的不同而提問,還是不懂書中的術語,還是對推理過程有疑問,還是書中的描述和你的經驗 直接經驗或間接經驗 矛盾?當我讀到第31章的時候。講到合作推送完成,...

Qt訊號槽第五個引數

connect用於連線qt的訊號和槽,在qt程式設計過程中不可或缺。它其實有第五個引數,只是一般使用預設值,在滿足某些特殊需求的時候可能需要手動設定。qt autoconnection 預設值,使用這個值則連線型別會在訊號傳送時決定。如果接收者和傳送者在同乙個執行緒,則自動使用qt directco...