2011-06-13 145 views
1

爲什麼此程序不打印任何內容?Qt.QueuedConnection從未發送消息

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

class A(QObject): 
    def __init__(self): 
     super(A, self).__init__() 

    sig = pyqtSignal() 

    @pyqtSlot() 
    def slot(self): 
     print("received") 

a = A() 
a.sig.connect(a.slot, Qt.QueuedConnection) 

a.sig.emit() 
a.sig.emit() 
a.sig.emit() 

如果我刪除Qt.QueuedConnection,它按預期工作。我試圖看看Qt.QueuedConnection是否會自動刪除重複的事件。

回答

3

我不是Python(或PyQt)的專家,但排隊的連接只有在應用程序再次進入事件循環時纔會傳遞,而正常連接對應於直接函數調用。所以我想在你的情況下,你必須等到應用程序進入事件循環才能調用該插槽(儘管在代碼中沒有看到任何應用程序對象)。

編輯:我懷疑它刪除重複調用,因爲Qt不知道它是否是重複調用或應該額外執行的概念上不同的調用。

+0

啊,你明白了。 – 2011-06-13 21:30:11

+0

是的,你是對的。 Qt沒有消耗重複調用的連接類型太糟糕了。 – 2011-06-13 21:40:54

+1

@NeilG:這將如何工作?確定一個調用是重複還是邏輯的一部分的標準是什麼?例如。如果一個信號在循環中運行,最終會增加一些值作爲整個程序邏輯的一部分。還是你指的是兩個或更多的發射聲明彼此跟隨的情況,就像在你的例子中一樣? – 2014-01-22 16:19:37