PySide筆記之信號連接信號
code review!
在 PySide6(以及 Qt 的其他綁定,如 PyQt)中,信號可以連接到信號。也就是說,可以把一個信號的發射,作為另一個信號的觸發條件。這樣做的效果是:當第一個信號被發射時,第二個信號也會自動被發射。
示例代碼
假設有兩個對象,各自有一個信號:
from PySide6.QtCore import QObject, Signalclass Sender(QObject):triggered = Signal()class Receiver(QObject):responded = Signal()def __init__(self):super().__init__()self.responded.connect(self.on_responded)def on_responded(self):print("Receiver's signal responded was emitted!")# 創建對象
sender = Sender()
receiver = Receiver()# 將 sender 的 triggered 信號連接到 receiver 的 responded 信號
sender.triggered.connect(receiver.responded)# 現在,當 sender.triggered 被發射時,receiver.responded 也會被發射
sender.triggered.emit()
輸出:
Receiver's signal responded was emitted!
解釋
sender.triggered.connect(receiver.responded)
這一行,將sender
對象的triggered
信號連接到了receiver
對象的responded
信號。- 當
sender.triggered.emit()
被調用后,receiver.responded
信號會自動被發射。 receiver.responded
連接了一個槽函數,所以會執行on_responded()
。
PySide6 中信號可以連接到另一個信號。當第一個信號發射時,被連接的第二個信號也會自動發射。
如有更復雜的信號鏈需求,也可以級聯連接。
注意事項
- 信號連接信號在 Qt C++ 和 Python 綁定(如 PySide6/PyQt)中都是被支持的。
- 這在需要進行信號鏈式轉發、解耦組件時非常有用。
- 也可以一個信號連接多個信號或多個槽。