2012-06-30 10 views
6

Czytając this dwa pytania wymyślił:PyQt4 @pyqtSlot: do czego służy kwarg?

1. Mówi

czasami konieczne jest, aby wyraźnie zaznaczyć metodę Python jako slot Qt

a ja zawsze używaj dekoratora @pyqtSlot, ponieważ jest napisane:

Conne icting sygnał do zdobione metodą Python ma również tę zaletę zmniejszenia ilości pamięci używanej i jest nieco szybciej

zadaję sobie pytanie: w jakich konkretnych przypadkach jest to konieczne? i: Czy są jakieś zalety nie używania dekoratora @pyqtSlot?

2. Argument wynikowy słów kluczowych, jaki jest jego cel?

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

Wygląda typu wartości zwracanej, ale AFAIK nie można odzyskać wartości zwracanych podczas emitowania sygnałów.

Jakieś pomysły na ten temat?

Odpowiedz

6
  1. Jest szybszy z powodu architektury PyQt. PyQt konwertuje gniazda Pythona na sloty C++, aby komunikować się ze strukturą Qt. Kiedy jawnie oznaczysz metodę Pythona jako slot Qt i dostarczysz dla niej sygnaturę C++, kod PyQt nie musi odgadnąć samego podpisu C++, ponieważ jest już określony. Może to poprawić wydajność w przypadku ciężkich projektów.

  2. Wartość zwracana jest potrzebna tylko wtedy, gdy chcesz wywołać to gniazdo jako normalną funkcję.

Edit: Wydaje się, że metoda QMetaObject.invokeMethod wykonuje gniazdo i wykorzystuje to wartość zwracana.

+0

To ma sens, dzięki! Więc przypuszczam, że nie ma żadnej korzyści z nie używania dekoratora, tj. ? – Pedru

+0

używaj go na ciężko używanych automatach. Jeśli jest to podstawowe gniazdo, które nie robi wiele i nie jest nazywane dużo, nie ma potrzeby w dekoratorze. Poprawia nieco skrypt, ale nie będzie zauważalny w przypadku prostych funkcji. – iTayb

+0

OK, więc chciałbym powiedzieć, zawsze używaj go, ponieważ poprawia on czytelność kodu (z podświetlaniem składni). – Pedru