在 Qt 框架中,connect
?函數是一個非常重要的機制,用于在信號(signal)和槽(slot)之間建立連接。信號和槽是 Qt 中用于對象間通信的一種機制。當某個特定事件發生時,一個對象可以發射(emit)一個信號,而另一個對象的槽函數則可以被這個信號觸發。
connect
?函數的基本語法如下:
bool QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *slot); |
sender
?是發射信號的對象。signal
?是要連接的信號名稱,包括參數的類型信息。receiver
?是接收信號并響應的對象。slot
?是接收對象中要調用的槽函數名稱,同樣包括參數的類型信息。
使用方法
在 Qt5 中,connect
?函數得到了增強,支持新的信號槽語法,使得類型檢查和連接錯誤能夠在編譯時被捕獲,而不是在運行時。這通過使用函數指針來實現。
舊式字符串連接(Qt4 及之前的版本)
connect(sender, SIGNAL(signalName(Type)), receiver, SLOT(slotName(Type))); |
新式函數指針連接(Qt5 及更高版本)
connect(sender, &SenderClass::signalName, receiver, &ReceiverClass::slotName); |
示例
假設我們有兩個 QObject 派生類的實例:senderObject
?和?receiverObject
。senderObject
?有一個信號?someSignal()
,而?receiverObject
?有一個槽?someSlot()
。連接這兩個對象的信號和槽的代碼將如下所示:
舊式字符串連接
connect(senderObject, SIGNAL(someSignal()), receiverObject, SLOT(someSlot())); |
新式函數指針連接
connect(senderObject, &SenderClass::someSignal, receiverObject, &ReceiverClass::someSlot); |
注意事項
- 信號和槽的參數類型必須匹配,否則連接將失敗。
- 使用新式連接時,如果信號或槽的參數發生更改,編譯器將在編譯時捕獲錯誤,而不是在運行時。
- 一個信號可以連接到多個槽,并且一個槽也可以連接多個信號。
connect
?函數返回一個布爾值,表示連接是否成功建立。
斷開連接
Qt 還提供了?disconnect
?函數來斷開之前建立的信號槽連接。其語法與?connect
?類似。
disconnect(sender, SIGNAL(signalName(Type)), receiver, SLOT(slotName(Type))); | |
// 或者使用新式語法 | |
disconnect(sender, &SenderClass::signalName, receiver, &ReceiverClass::slotName); |
總的來說,connect
?函數是 Qt 框架中實現對象間通信的核心機制之一,它允許開發者以松耦合的方式組織代碼,提高程序的可維護性和可擴展性。