Qt學習之路6 訊息處理之訊號與槽

2021-08-22 15:16:59 字數 1467 閱讀 9110

我們都知道在qt中的訊息處理機制是訊號與槽,在實際程式開發中也就是通過將元件產生的訊號與對應的槽函式連線起來就可以實現預想的功能了,那麼應用程式是如何感知到這個訊號的?

在qt中封裝了具體作業系統的訊息機制,遵循經典的gui訊息驅動事件模型。

當產生乙個使用者事件後,首先得到感知的肯定是作業系統,作業系統根據事件型別將其轉換成對應的應用程式訊息發給應用程式,程式收到這個訊息後就會呼叫對應的訊息處理函式。

qt中如何表示使用者訊息?

qt中如何將使用者訊息對映到訊息處理函式上?

qt中的訊息對映需要遵循什麼規則?

在qt中定義了幾個與系統相關的概念:

訊號:作業系統產生的訊息

槽:程式中的訊息處理函式

連線:將訊號與槽關聯起來

兩個物件通過connect連線產生關聯,在qobject_1物件發出訊號,在槽函式所在的qobject_2物件上執行。連線就相當於關注了某人後,當她有動態時你能及時收到她發動態的訊息,而訊息處理函式就相當於你點開她的動態,所以訊號到槽的關聯必然是發生在兩個物件上的。

如上所說,訊號與槽包含兩個物件:發生訊號的物件和接收訊號的物件。

通過connect函式將他們之間建立起對映,根據引數可知qt中的訊號和槽函式使用字串描述,而signal和slot關鍵字能將兩個字串變得有意義。

signal關鍵字用於指定訊息名,slot用於指定訊息處理函式名。

另外兩個在自定義槽的類中出現的關鍵字是q_object和slots。

q_object:凡是自定義了槽的類都必須在類的開始處填入此關鍵字,它包含一些經過元物件編譯器處理後的內容,元物件編譯器在處理訊號與槽時會將q_object進行擴充套件,會生成乙個以moc_開頭的檔案,裡面就是描述q_object的,元物件編譯發生在程式的預處理之前。

slots:用於宣告乙個函式是槽函式,它的訪問級別有public、protected和private。

起始還有兩個關鍵字:signals和emit。

1、檢查類是否繼承自qobject,即qt物件。

2、檢查類宣告開始處是否宣告q_object

3、檢查是否使用slots關鍵字宣告成槽函式

4、檢查是否有拼寫錯誤

5、重新執行qmake

當然,既然存在connect,那麼也必然存在disconnect,其用法就是:

disconnect(this, signal(…), this, slot(…));

Qt學習之路隨記 訊號槽

qt 5.9.2 版本,qobject connect 常用的形式為 connect sender,signal,receiver,slot connect 一般會使用前面四個引數,第乙個是發出訊號的物件,第二個是傳送物件發出的訊號,第三個是接收訊號的物件,第四個是接收物件在接收到訊號之後所需要呼叫...

Qt學習之路之自定義訊息框

qt自己也有很多的訊息框,這時,如果這些訊息框都不能滿足開發的需求,qt還允許自定義訊息框。包括訊息框的圖示,按鈕和訊息框顯示的內容都可以根據需求設定。不廢話了,下面給出個簡單的例子 custmsg widget.h ifndef custmsgwidget h define custmsgwidg...

QT之訊號與槽

當乙個物件的狀態發生變化時,通過訊號的方式通知其他物件,其他物件通過執行相應的槽函式來響應該訊號。訊號與槽是qt提供的任意兩個 qobject 物件之間的通訊機制,常用來完成介面操作的響應。訊號 訊號 是可以看作是乙個請求或者乙個動作的標誌。訊號的理解 1 訊號是屬於物件的 2 當物件的狀態改變時,...