2012-06-30 75 views
6

通過閱讀this,兩個問題上來:PyQt4 @pyqtSlot:kwarg的結果是什麼?

1. 它說

有時需要顯式標記一個Python方法爲 一個Qt槽

雖然我總是使用@pyqtSlot裝飾因爲它說:

Conne電視機的信號來裝飾Python的方法也有 優勢減少的內存量的使用,速度稍快

我問自己:在特定情況下有必要嗎? 和:沒有使用@pyqtSlot裝飾器的優點嗎?

2. 結果關鍵字參數,它的用途是什麼?

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

它看起來像返回值的類型,但AFAIK在發射信號時無法檢索返回值。

有關於此的任何想法?

回答

6
  1. 由於PyQt架構,速度更快。 PyQt將python插槽轉換爲C++插槽,以便與Qt框架進行通信。當你明確地將Python方法標記爲Qt槽併爲其提供C++簽名時,PyQt代碼本身不必猜測C++簽名,因爲它已經被指定。這可能會提高重型項目的績效。

  2. 僅當您想將插槽作爲正常功能調用時才需要返回值。

編輯:看來,QMetaObject.invokeMethod方法執行插槽,並使用它的返回值。

+0

這很有道理,謝謝!所以我認爲沒有使用裝飾器沒有優勢,即<始終使用它>? – Pedru

+0

在頻繁使用的插槽上使用它。如果這是一個基本的插槽,它沒有太多的功能,而且沒有多少調用,那麼在裝飾器中就沒有必要了。它稍微強化了腳本,但在簡單功能上不會引人注意。 – iTayb

+0

好的,所以我會說,總是使用它,因爲它增強了代碼的可讀性(使用語法高亮顯示) – Pedru