PyQt4 @pyqtSlot: для чего нужен результат kwarg?

чтение этой, возникли два вопроса:

1. Тут написано

иногда необходимо явно пометить метод Python, как быть слот в Qt

в то время как я всегда использую декоратор @pyqtSlot, потому что он говорит:

подключение сигнала к декорированному методу Python также имеет преимущество уменьшения объема используемой памяти и немного быстрее

Я спрашиваю себя: в каких конкретных случаях она необходима? и: есть ли преимущества использования @pyqtSlot оформитель?

2. Аргумент ключевого слова result, какова его цель?

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

это похоже на тип возвращаемого значения, но AFAIK вы не можете получить возвращаемые значения при излучении сигналов.

есть идеи по этому поводу?

1 ответов


  1. это быстрее из-за архитектуры PyQt. PyQt преобразует слоты python в слоты C++ для связи с платформой Qt. Когда вы явно отмечаете метод Python как слот Qt и предоставляете для него подпись C++, код PyQt не должен угадывать саму подпись C++, как это уже указано. Это может повысить эффективность тяжелых проектов.

  2. возвращаемое значение необходимо только тогда, когда вы хотите вызвать слот как обычный функция.

редактировать: похоже, что QMetaObject.invokeMethod метод выполняет слот и использует его возвращаемое значение.