2012-11-09 25 views
1

我正在使用PySide(Python Qt綁定)。QObject :: connect:無法在PySide中排隊'object'類型的參數

我有一個QThread類的工作線程,通過信號/插槽機制更新主GUI線程(更新QTableWidget)。

在我的工作線程,我有以下幾點:

self.emit(SIGNAL("alterTable(object"), params) 

在我的GUI線程我有這樣的:

self.connect(self.worker, SIGNAL("alterTable(object)"), self.updateMainTable, Qt.AutoConnection) 

由於正在運行的所有連接到相同的插槽幾個類似的工作線程(self.updateMainTable),我應該使用AutoConnection(並因此使用QueuedConnection)。使用Qt.DirectConnection作品,但它不安全(或者我已被告知)。

但是當我嘗試使用自動連接,我收到以下錯誤:

QObject::connect: Cannot queue arguments of type 'object' 
(Make sure 'object' is registered using qRegisterMetaType().) 

我用Google搜索永世試圖找出一種方式如何使用PySide的qRegisterMetaType(),但無濟於事。我在網上找到的所有資源都指向C++語法/文檔。

如果有任何區別,大多數情況下所討論的對象是dict

+0

如果您在信號\插槽中傳遞對象,那麼您的設計可能有缺陷。 – UmNyobe

回答

1

我想我自己找到了答案,並不完全是答案,而是一個可行的解決方案。

我將所有信號切換爲新式語法。如果有人想知道,我通過在我的工人類中定義一個自定義信號來做到這一點。所以,我的代碼看起來像這樣

class Worker(QThread): 

    alterTable = Signal(dict) 

    def __init__(self, parent=None): 
     .... 
     self.alterTable.emit(parameters) 


class GUI(QMainWindow): 

    def __init__(self, parent=None): 
     WorkerModule.Worker().alterTable.connect(self.myMethod) 

出於某種原因,該信號是的QThread類中;否則,Qt抱怨「信號沒有屬性連接」錯誤,這很奇怪。

相關問題