PySide和PyQt採用Qt信號插槽機制,通過這種機制,我們可以將任何/多個信號連接到任何/多個插槽,只要散佈的數據類型匹配。從信號中斷開插槽
信令對象具有接收時隙的一些知識,例如,通過方法receivers
知道他們的號碼,或者信號可以通過其disconnect
方法與接收插槽斷開。
我的問題與反方向有關 - 例如,插槽是否知道它連接了哪些信號?插槽能否與信號斷開?
更新:那麼爲什麼我問這個 - 我有一個對象執行一些計算。計算由用戶可編輯的Python表達式定義。表達式被解析並且必要的數據源從這個中被識別...計算對象(充當槽)然後連接到這些數據源(它們充當信號),並且一旦數據源產生/更新值,這個事實是用信號通知該插槽並重新評估表達式。當用戶更改表達式時,需要再次解析並從現有信號(即數據源)斷開連接並連接到新的數據源。你可以想象它就像Excel中連接到其他單元格的公式一樣。
我知道有幾種方法可以解決這個問題,例如手動跟蹤連接(當然,這是額外的工作),或刪除表達式對象並在每次更改時創建一個新連接(似乎還不夠好,因爲用戶可能想要追溯計算數據源,這不會有幫助) 。但我很好奇,如果這可以純粹使用簡單的信號插槽機制解決。換句話說,我對任何解決方法都不感興趣......我知道他們,並會使用他們我信號插槽在這裏沒有幫助。 :)
我不這麼認爲。但是,您可以手動跟蹤連接和斷開連接(例如,使用'QObject :: connect'的包裝器)。 –
我認爲必須有一些東西,因爲當一個接收對象被刪除時,必須通知它的一個接收器已經死了以停止發送信號給它。但是我還沒有在文檔中找到任何內容....當然,手動保持軌道是我的另一種選擇。但是,如果Qt能夠自動爲我執行此操作,我希望避免雙重工作。 –
我認爲你問的是錯誤的問題。請解釋你想要解決什麼問題,不要問如何解決你對某個神祕問題的解決方案。尋求幫助時這是很常見的錯誤。爲什麼你需要知道插槽連接的位置?也許在這種情況下,您需要暫時斷開連接信號來防止遞歸?爲了防止可能的遞歸,有'blockSignals'方法。 –