2012-06-30 7 views
6

Leggendo this, due domande si avvicinò:PyQt4 @pyqtSlot: qual è il risultato di kwarg?

1. Dice

a volte è necessario per marcare in modo esplicito un metodo Python come uno slot Qt

Mentre io utilizzare sempre il decoratore @pyqtSlot perché dice:

Conne cting un segnale ad un metodo di Python decorato ha anche il vantaggio di ridurre la quantità di memoria utilizzata e è leggermente più veloce

mi chiedo: in quali casi specifici è necessario? e: Ci sono dei vantaggi nel non utilizzare il decoratore @pyqtSlot?

2. L'argomento della parola chiave risultato, qual è il suo scopo?

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

Sembra che il tipo di valore di ritorno, ma per quanto ne so non è possibile recuperare i valori restituiti quando emettono segnali.

Qualche idea al riguardo?

risposta

6
  1. È più veloce grazie all'architettura PyQt. PyQt converte gli slot Python in slot C++, per comunicare con il framework Qt. Quando contrassegni esplicitamente un metodo Python come uno slot Qt e fornisci una firma C++, il codice PyQt non deve indovinare la firma C++ stessa, poiché è già specificata. Ciò potrebbe migliorare le prestazioni su progetti pesanti.

  2. Il valore di ritorno è necessario solo quando si desidera chiamare lo slot come una funzione normale.

Edit: Sembra che il metodo QMetaObject.invokeMethod esegue uno slot e usa il suo valore di ritorno.

+0

Questo ha senso, grazie! Quindi suppongo che non ci sia alcun vantaggio nel non utilizzare il decoratore, cioè ? – Pedru

+0

usalo su slot molto usati. Se è uno slot di base che non fa molto e non è chiamato molto, non c'è bisogno nel decoratore. Migliora lo script un po ', ma non sarà visibile su semplici funzioni. – iTayb

+0

OK, quindi, direi, usalo sempre perché migliora la leggibilità del codice (con evidenziazione della sintassi) – Pedru