2011-09-20 1145 views
1

我有一個奇怪的問題。這裏是我的代碼:Singleshot:SLOT帶參數

def method1(self, arg1, delay=True): 
    """This is a method class""" 

    def recall(arg1): 
     self.method1(arg1, delay=False) 
     return 

    if delay: 
      print "A: ", arg1, type(arg1) 
      QtCore.QTimer.singleShot(1, self, QtCore.SLOT(recall(int)), arg1) 
      return 

    print "B: ", arg1, type(arg1) 

所以我得到這個控制檯:

A: 0 <type 'int'> 
B: <type 'int'> <type 'type'> 

在 「B」 你應該得到比 「A」 不變。任何人都知道什麼是錯的?我怎樣才能得到arg1值 ,而不是它的類型?這不作出任何意義......

PS:我想是這樣的:http://lists.trolltech.com/qt-interest/2004-08/thread00659-0.html

回答

0

看來,當你調用此類似:

QtCore.QTimer.singleShot(1, self, QtCore.SLOT(recall(int)), arg1) 

你的意思來調用這個代替?

QtCore.QTimer.singleShot(1, self, QtCore.SLOT(recall(arg1)), arg1) 

要傳遞int作爲recall第一個參數,它直接傳送給method1int是一個類型對象(整數類型)。

+0

感謝您的答覆。你是對的。現在我得到的「B」與「A」相同。但是,我也得到了這個:「Object :: connect:期望的圓括號,插槽RandomClassFromHell ::」。你知道我該如何擺脫它? – Manolo

+0

哦,行是這樣的:QtCore.QTimer.singleShot(1,自我,QtCore.SLOT(召回(ARG1))),因爲它與該aditional的說法XD問題。對不起,這個小編輯框很難寫。 – Manolo

+0

對不起,我對「Qt」或「SLOT」一無所知。您可能需要針對更新後的代碼和問題提出一個新問題。 – TorelTwiddler

7

傳遞給SLOT函數參數必須與類型作爲參數,而不是直接調用一個字符串,所以你不能沒有任何參數與參數的插槽連接到信號。

您可以使用lambda函數:

QtCore.QTimer.singleShot(1, lambda : self.recall(arg1))