elasticsearch入門系列">elasticsearch入門系列
1569
2025-03-31
本文主要講QT信號槽的連接方式。QT使用connect函數(shù)進(jìn)行連接信號槽。
目前QT5文檔中提供了五個connect的重載函數(shù)。如下:
connect(const QObject *, const char *, const QObject *, const char *, Qt::ConnectionType ) connect(const QObject *, const QMetaMethod &, const QObject *, const QMetaMethod &, Qt::ConnectionType ) connect(const QObject *, const char *, const char *, Qt::ConnectionType ) const connect(const QObject *, PointerToMemberFunction , const QObject *, PointerToMemberFunction , Qt::ConnectionType ) connect(const QObject *, PointerToMemberFunction , Functor ) connect(const QObject *, PointerToMemberFunction , const QObject *, Functor , Qt::ConnectionType )
connect函數(shù)
接下來一一講解。
第一種方式時比較傳統(tǒng)的一種信號槽連接方式。函數(shù)名稱與參數(shù)類型都比較直觀明確。
第二種采用QMetaMethod方式,可以通過QMetaMethod進(jìn)行類型比對等。
第三種與第一種的信號槽連接方式相似,只是省略了接收方,接收方這里指的是this對象。這種寫法省略了this,使信號槽連接代碼簡潔。
第四種方式采用函數(shù)指針的方式進(jìn)行綁定,省略了函數(shù)的參數(shù)類型,只指明了信號槽的函數(shù)名。這種寫法通常適用于沒有重載函數(shù)的信號槽函數(shù)。
第五種的信號依然是函數(shù)指針,這里也省略了接收方。最后一個參數(shù)是槽函數(shù),可以是this對象的槽函數(shù)或者是lambda表達(dá)式等。
第六種與第五種的信號槽連接方式相似,這里明確指明了接收方。
connect連接類型
connect函數(shù)的最后一個參數(shù)是Qt::ConnectionType,該類型指明信號槽的連接方式。
Qt::ConnectionType定義如下:
Qt::AutoConnection Qt::DirectConnection Qt::QueuedConnection Qt::BlockingQueuedConnection Qt::UniqueConnection
Qt::AutoConnection
這是最常用的連接類型,也是connect函數(shù)的默認(rèn)連接類型。
如果接收方與發(fā)送方在同一線程中,相當(dāng)于使用Qt::DirectConnection;
如果接收方與發(fā)送方在不同線程中,相當(dāng)于使用Qt::QueuedConnection。
連接類型是在信號發(fā)出時確定的。
Qt::DirectConnection
該類型適用于單線程場合。
當(dāng)信號發(fā)出時,槽函數(shù)在信號所在的線程中立即被調(diào)用。相當(dāng)于實時調(diào)用,類似直接函數(shù)調(diào)用。
Qt::QueuedConnection
該類型適用于多線程異步場合。
信號發(fā)送后,由接收方線程事件隊列處理,發(fā)送方所在線程會繼續(xù)向下執(zhí)行。
槽函數(shù)在接收方的線程中執(zhí)行,并不是實時調(diào)用的。
Qt::BlockingQueuedConnection
該類型適用于多線程同步場合。
信號發(fā)送后,由接收方線程事件隊列處理,只是在槽函數(shù)返回之前信號所在的線程會阻塞。
槽函數(shù)在接收方的線程中執(zhí)行。 如果接收方與發(fā)送方在同一線程,不能使用該連接類型。
Qt::UniqueConnection
該類型用于防止重復(fù)連接。
這是一個標(biāo)志,可以與以上四種連接類型通過按位或的方式進(jìn)行組合。使用該類型進(jìn)行連接時,當(dāng)相同的信號槽已經(jīng)連接過了,就會連接失敗。
Qt
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。