PyQt4 @pyqtSlot:kwarg的结果是什么?


问题内容

通过阅读本文,提出了两个问题:

1.它说

有时有必要将Python方法显式标记为Qt插槽

虽然我总是使用@pyqtSlot装饰器,因为它说:

将信号连接到经过修饰的Python方法还具有减少使用的内存量的优点,并且速度稍快

我问自己:在什么情况下有必要?和:不使用@pyqtSlot装饰器有什么好处?

2.结果关键字参数的目的是什么?

@pyqtSlot(int, result=int)
def foo(self, arg1):
    """ C++: int foo(int) """

看起来像返回值的类型,但是AFAIK发出信号时无法检索返回值。

有什么想法吗?


问题答案:
  1. 由于PyQt架构,它速度更快。PyQt将python插槽转换为C 插槽,以便与Qt框架进行通信。当您将Python方法显式标记为Qt插槽并为其提供C 签名时,PyQt代码不必猜测C ++签名本身,因为它已经被指定。这可以提高大型项目的性能。

  2. 仅当您想以正常功能调用插槽时才需要返回值。

编辑
:似乎该QMetaObject.invokeMethod方法执行一个插槽,并使用它的返回值。