一般情况下,可直接调用函数或对象。
若在某个类实例中,无法修改其它类实例某些参数或调用某些函数,可采用信号槽机制。
若需高频调用某一函数或对象,但又不能确定先前的调用已处理完成,这时可采用信号槽机制。
将信号槽机制结合 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死循环错误提示,可以考虑使用信号/槽软连接机制。
注意:
这种死循环错误提示一般不会弹出错源文件及具体行号,非常难于判断。
有时,运行时间短的代码不提示死循环,而运行时间长的代码却会提示这是死循环。
通常,不必在槽函数定义上方添加声明,即槽函数的定义同普通函数 (或方法) 没有区别。
但有要求的特殊情况除外。
版权声明: 本文为独家原创稿件,版权归 乐数软件 ,未经许可不得转载。