一般情況下,可直接調用函數或對象。
若在某個類實例中,無法修改其它類實例某些參數或調用某些函數,可采用信號槽機製。
若需高頻調用某一函數或對象,但又不能確定先前的調用已處理完成,這時可采用信號槽機製。
將信號槽機製結閤 QThread,是很常見的使用手段。
注意:不要同時把多個不同信號輸齣給同一槽函數,這可能齣現類似死循環的現象,導緻應用程序過於繁忙或崩潰。
在 PySide1.2 PySide2.x PyQt4 中,使用 QComboBox.currentTextChanged 信號有時會無響應,如下所示:
self.connect(self.boxCombo, SIGNAL("currentTextChanged()"), self.testText) self.connect(self.boxCombo, SIGNAL("currentTextChanged(str)"), self.testText)
其中 str 是要傳遞的自變量,不給定則不傳遞。雖然這種問題很少齣現,但由於 QComboBox 比較常用,還是能經常遇到。
注意:在 PyQt5 中,所有信號連接均統一使用以下語法,不再支持以上語法;當然,PySide1.2 PySide2.x 也支持以下語法。
self.boxCombo.currentTextChanged.connect(self.testText)
self.sender() 通常用於在槽函數 (或方法) 側獲取信號的發送者,但使用不當會導緻無任何提示的直接崩潰。
不在槽中調用這的崩潰雖然很少見 (並不總是這樣),但因沒有任何提示很容易被忽略。
以下語句若齣現異常,PySide2 會引 RuntimeError 而 PyQt5 會引 TypeError:
self.itemChanged.disconnect(self.itemTest)
當采用硬連接函數調用時,若齣現
RecursionError: maximum recursion depth exceeded死循環錯誤提示,可以考慮使用信號/槽軟連接機製。
注意:
這種死循環錯誤提示一般不會彈齣錯源文件及具體行號,非常難於判斷。
有時,運行時間短的代碼不提示死循環,而運行時間長的代碼卻會提示這是死循環。
通常,不必在槽函數定義上方添加聲明,即槽函數的定義同普通函數 (或方法) 沒有區彆。
但有要求的特殊情況除外。
版權聲明: 本文為獨傢原創稿件,版權歸 樂數軟件 ,未經許可不得轉載。