Qt Quick快速入門之信號、槽

  信號和槽主要用於組件之間的通訊,相似於.net和java中的委託。java

  使用QObject::connect方法將信號與槽關聯起來,而後信號的發起者發出信號,接受者中的槽函數就會執行。多線程

  好比connect(this,SIGNAL(start()),worker,SLOT(Start())),將當前類中start信號關聯到worker對象的Start函數,當咱們調用emit this->start()時就發出信號,槽函數就會收到這個信號。函數

  connect函數還有第五個參數,這個參數決定信號什麼時候傳給槽,這裏提一下,不過本人目前一直使用的默認值。this

  Qt::AutoConnection,默認值自動鏈接,當信號發起者與槽函數執行者在同一線程時,就會使用Qt::DirectConnection,反之則使用Qt::QueuedConnection。spa

  Qt::DirectConnection,直接相連,信號一發起槽函數立馬執行,信號發起者與執行者在同一線程。.net

  Qt::QueuedConnection,隊列式,信號發起者與執行者不在同一個線程,信號發起時,槽函數會等待調度。線程

  Qt::BlockingQueuedConnection,跟Qt::QueuedConnection同樣,不一樣的是信號發起時存在互斥鎖,要等待槽函數返回,這樣若是槽函數與信號函數在同一個線程中就會發生死鎖(也就是一直堵在鎖的位置,無法進入槽函數)。對象

  Qt::UniqueConnection,這個經過「或」跟上面的一塊兒使用,表示一樣的connection只能鏈接一次,好像沒啥做用了,對象、信號、槽相同的connection屢次鏈接會失敗。隊列

  信號與槽要想斷開鏈接,使用QObject::disconnect方法。it

  關於信號和槽的使用也就這麼多,可是常常用,特別是在多線程裏面,趕上槽函數沒執行多是鏈接寫錯了或是槽函數所在線程哪裏堵住了(好比死循環之類的)。

相關文章
相關標籤/搜索