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

时间:2012-06-30 09:15:41

标签: python pyqt pyqt4 signals-slots

通过阅读this,出现了两个问题:

1。 它说

  

有时需要将Python方法明确标记为   一个Qt插槽

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

  

将信号连接到装饰的Python方法也有   减少使用的内存量的优点,并且稍快一点

我问自己:哪些具体案例是必要的? 和:没有使用@pyqtSlot装饰器有什么好处吗?

2。 结果关键字参数,它的目的是什么?

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

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

有关于此的任何想法吗?

1 个答案:

答案 0 :(得分:6)

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

  2. 仅当您要将插槽作为普通功能调用时,才需要返回值。

  3. 修改:似乎QMetaObject.invokeMethod方法执行一个广告位并使用它的返回值。