8

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

1. 它说

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

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

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

我问自己:在哪些具体情况下是必要的?并且:不使用@pyqtSlot 装饰器有什么好处吗?

2. result关键字参数,它的作用是什么?

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

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

有什么想法吗?

4

1 回答 1

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

  2. 仅当您想将插槽作为普通函数调用时才需要返回值。

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

于 2012-06-30T10:33:31.570 回答