Qt5.9中QObject::connect()函式用法(函式使用的前提條件和引數詳解)

淨無邪發表於2018-01-30

本文章主要總結Qt5.9中QObject::connect()函式的用法,全文分為兩大部分,第一部分講解connect函式使用的前提條件,第二部分講解connect函式各個引數詳解和具體的用法例項。


一、首先需要注意的是,connect()函式有且只能在QObject類裡面和QObject派生類裡面使用,自己新建的類裡面(基類不是QObject類和其QObject派生類)使用connect()函式是無效的,編譯時一直報錯。當然,我們新建工程比如widget,mainwindow,dialog都是QObject的派生類,所以可以直接使用connect()函式,實現訊號與槽機制。


1.1類ClassMQTT不是QObject類也不是其派生類時,使用connect()訊號與槽機制時,編譯會報錯,如下圖所示:


connect()函式錯誤用法



connect()函式錯誤用法


1.2類ClassMQTT是QObject類的派生類時,使用connect()訊號與槽機制時,編譯通過,如下圖所示:

connect()函式正確用法


connect()函式正確用法



二、connect()函式各個引數詳解和使用例項。

static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType = Qt::AutoConnection);

2.1函式引數詳解:第一個引數sender為傳送物件;第二個引數為傳送物件裡面的一個訊號;第三個引數為接收物件;第四個引數為接收物件裡面的槽函式。一般我們使用傳送者觸發訊號,然後執行接收者的槽函式。


2.2 connect()函式使用的一個例項:


如上圖所示,訊號引數用SIGNAL包含,槽函式用SLOT包含。然後在對應標頭檔案裡面新增槽函式,如下圖所示:



接著可以定義槽函式的內容,這樣就實現了用訊號觸發執行槽函式的功能了。


2.3 connect的訊號和槽的對應機制可以是一個訊號對多個槽函式,也可以是多個訊號對應一個槽函式。


2.4 錯誤原理:傳送者和接受者必須來自QObject。



參考內容:

http://blog.csdn.net/u012964993/article/details/30454923(重點參考)

http://blog.csdn.net/JuanA1/article/details/6633184

http://blog.csdn.net/kingle123/article/details/72871731

http://blog.csdn.net/jiang_yaling/article/details/72850874

相關文章