欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:【Qt】信號與槽

柚子快報邀請碼778899分享:【Qt】信號與槽

http://yzkb.51969.com/

?博客主頁: 小羊失眠啦. ?系列專欄:《C語言》 《數(shù)據(jù)結(jié)構(gòu)》 《C++》 《Linux》 《Qt》 ??感謝大家點贊?收藏?評論??

一、什么是信號與槽

信號槽,是Qt的核心機制,用來實現(xiàn)對象之間的通信: 即,某個對象,想通知另一個對象去做某件事情時, 這個對象,就發(fā)送某個“信號”, 另一個對象收到這個信號后,就去做之前約定好的那個 特定的事情。

信號槽機制有:

1)信號的發(fā)送者

2)信號的接受者

3)發(fā)送者發(fā)送的這個信號(不需要程序員去定義函數(shù)體的空殼函數(shù))

4)接收者去執(zhí)行的某個函數(shù)(稱為:槽)

我們要做:

1.信號槽需要在使用之前,做好關(guān)聯(lián)(信號和槽之間的關(guān)聯(lián))

2.發(fā)送者在需要的時候,發(fā)送這個信號

問題:為什么不直接使用C/C++的回調(diào)函數(shù),而去使用信號槽?

1)信號與槽,是松耦合的,信號發(fā)送者,不需要去了解接收者的具體信息(有哪些接口等) 回調(diào)函數(shù),是緊密耦合,直接調(diào)用目標(biāo)對象的特定函數(shù)。

2)信號槽,比回調(diào)函數(shù),使用起來更靈活。

信號與槽缺點

使用信號槽,比使用回調(diào)函數(shù),運送速度慢: 信號與槽函數(shù)執(zhí)行,可能是異步的(僅使用直連方式連接信號槽時,槽函數(shù)才會被同步執(zhí)行,執(zhí)行完之后,發(fā)送信號(emit)語句之后的代碼才會被執(zhí)行。

使用回調(diào)函數(shù),都是同步方式執(zhí)行的。

二、信號與槽的關(guān)聯(lián)

2.1 connect函數(shù)

寫法一

使用SIGNAL和SLOT,把信號和槽轉(zhuǎn)換成constchar*字符串

注意:

使用connect關(guān)聯(lián)時,信號和槽,如果有參數(shù),必須帶上參數(shù)的類型(不需要帶參數(shù)變量) 可以把QObject::省略,因為MainWindow本身就是QObject的子類,可以直接使用父類的方法。 信號和槽不需要、也不能使用類名進行限定,直接寫函數(shù)名以及新參列表即可。

寫法二

直接使用信號和槽函數(shù)的地址,但是要求: 信號和槽的參數(shù)個數(shù)相同,而且能夠進行合適的隱式類型轉(zhuǎn)換,合作就會編譯失敗

注意:該方式,信號和槽,需要使用類名進行限定!

合法使用:

MainWindow::MainWindow(QWidget*parent)

:QMainWindow(parent)

,ui(newUi::MainWindow)

{

ui->setupUi(this);

connect(ui->lineEdit,

&QLineEdit::textChanged,

ui->label,

&QLabel::setText);

}

2.2 自動連接

在QtCreator 的設(shè)計器中,右鍵單擊控件,選擇“轉(zhuǎn)到槽”

再選擇信號

然后自動生成一個空的槽函數(shù)(自動生成這個槽函數(shù)的聲明和一個空的實現(xiàn)):on_信號發(fā)送者的對象名_信號名

槽函數(shù)的具體實現(xiàn),需要自己完成。

注意: 也可以直接按照 這個命名規(guī)則手寫一個槽函數(shù),就可以實現(xiàn)信號槽的關(guān)聯(lián)! Qt 框架,會通過這個槽函數(shù)的命名,來自動識別信號的發(fā)送者、信號名 (程序員一般不使用這個方式,雖然是支持的,因為容易出錯,而且比較麻煩)

注意:

這種方式連接的信號槽,必須在槽函數(shù)對應(yīng)的訪問權(quán)限后加 slots 通過connect 連接的信號槽,對應(yīng)的槽函數(shù)不需要使用slots

三、定義信號

自定義信號,如上圖所示(上位機項目代碼片段) 自定義信號,必須使用signals:

信號,只是一個特殊的空函數(shù),不需要對應(yīng)的函數(shù)體實現(xiàn)。

信號的參數(shù)個數(shù),可以大于槽函數(shù)的參數(shù)個數(shù),但是不能少于槽函數(shù)的參數(shù)個數(shù)。

編譯器在構(gòu)建的時候,掃描到signals, 就會生成 moc_*.cpp文件

四、定義槽

普通的槽(槽函數(shù)),和普通函數(shù)一樣,不需要特殊設(shè)置。

使用設(shè)計器自動生成的槽函數(shù),必須使用宏slots,而且這個槽函數(shù)的命名,必須遵循“on_ 對象名_信號名”的規(guī)則。 (這種信號槽,不需要使用connect進行手動關(guān)聯(lián))

五、發(fā)送信號

自動發(fā)送信號

Qt 的組件,在用戶操作時,能自動發(fā)送對應(yīng)的型號,例如按鈕點擊后,自動發(fā)送clicked() 信號

用代碼手動發(fā)送信號

也可以使用emit手動發(fā)送信號: 相當(dāng)于在pushButton按鈕上點擊了一下,即讓這個按鈕發(fā)送click信號

emit ui->pushButton->clicked();

六、信號與槽連接方式

使用connect 進行信號和槽的關(guān)聯(lián)時,還有第5個參數(shù),表示具體的連接方式。 該參數(shù)的默認(rèn)參數(shù)是:Qt::AutoConnection 自動連接

6.1 直接連接 Qt::DirectConnection

效果類似于“函數(shù)調(diào)用”,同步執(zhí)行: 使用emit發(fā)送信號后,槽函數(shù)被直接調(diào)用,調(diào)用完成之后,再執(zhí)行emit之后的語句。

6.2 隊列連接 Qt::QueuedConnection

效果類似于“異步函數(shù)調(diào)用”。 當(dāng)信號發(fā)出后,信號被添加到“信號隊列”中, 需等到接收對象所屬線程的事件循環(huán)取得控制權(quán)時才取得該信號,再調(diào)用相應(yīng)的槽函數(shù)。 emit 發(fā)送信號后,直接執(zhí)行emit后面的代碼,不需要等待槽函數(shù)執(zhí)行完畢。

6.3 阻塞隊列連接 Qt::BlockingQueuedConnection

與隊列連接的基礎(chǔ)上,加上阻塞發(fā)送信號所在的線程。

用于在不同線程之間進行對象之間的通信。 它可以確保發(fā)送者在發(fā)出信號后立即等待接收者處理完槽函數(shù)后才繼續(xù)執(zhí)行。 當(dāng)信號被觸發(fā)時,發(fā)送者會阻塞直到接收者處理完對應(yīng)的槽函數(shù),并且該槽函數(shù)會在接收者所屬的線程中執(zhí)行。 這種連接類型適用于需要不同線程需要同步處理的情況。

6.4 自動連接 Qt::AutoConnection

如果發(fā)送信號和接收者在同一線程,就等效與:直接連接方式 如果發(fā)送信號和接收者不在同一線程,就等效與:隊列連接默認(rèn)的連接方式。

6.5 Qt::UniqueConnection

不能單獨使用,需要和其他類型組合使用, 用來確保指定的發(fā)送者、指定的信號、指定的接受者、指定的槽,只存在唯一的一種連接。 即用來避免:

避免信號和槽,以某種方式連接后,然后又調(diào)用connect以另一種方式連接避免建立多個重復(fù)的信號槽后,一個信號,將導(dǎo)致重復(fù)發(fā)送多個信號

定義自己的槽函數(shù)時,如果不使用slots, 那么使用connect進行信號和槽的連接時,必須 使用“方式2”(使用&取信號和槽的地址),如果使用SIGNAL和SLOT宏,會關(guān)聯(lián)失敗。 為了方便起見,定義自己的槽函數(shù)時,最好還是都加上slots。

七、對應(yīng)關(guān)系

同一個信號,可同時關(guān)聯(lián)多個槽。 多個信號,可關(guān)聯(lián)到同一個槽。

如果一個信號連接到多個槽,當(dāng)信號發(fā)出時,槽函數(shù)按照連接建立的順序被調(diào)用

默認(rèn)情況下,每個連接都會發(fā)出一個信號;對于重復(fù)的連接發(fā)出多個信號??梢酝ㄟ^一 個disconnect()調(diào)用中斷所有這些連接

八、斷開

實例

執(zhí)行效果

斷開指定的信號槽

disconnect 的其它用法

nullptr可以作為通配符,分別表示“任何信號”、“任何接收對象”或“接收對象中 的任何槽”

7a52d8f031f6.png)

斷開指定的信號槽

disconnect 的其它用法

nullptr可以作為通配符,分別表示“任何信號”、“任何接收對象”或“接收對象中 的任何槽”

柚子快報邀請碼778899分享:【Qt】信號與槽

http://yzkb.51969.com/

文章來源

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19211872.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄