我正在使用PySide(pythonqt绑定)。在
我有一个QThread类的工作线程,它通过signal/slot机制更新主GUI线程(更新QTableWidget)。在
在我的worker线程中,我有以下内容:
self.emit(SIGNAL("alterTable(object"), params)
我的图形用户界面中有:
^{pr2}$由于有几个相似的工作线程运行,所有线程都连接到同一个插槽(即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
。在
我很抱歉,很晚才给你答复。声誉不足,无法对您接受的答案添加评论。我希望这可以帮助新的PySide/Pyside2用户发现您的问题。在
问题:
QObject::connect: Cannot queue arguments of type 'object'
解决方案:
self.connect(self.worker, SIGNAL("alterTable(PyObject)"), self.updateMainTable, Qt.AutoConnection)
问题:
Qt complains about "Signal has no attribute connect" error
解决方案:在QObject中实现了}(Py2)或{}(Py3)调用父级的init方法。在
connect
属性,因此必须首先通过QMainWindow.__init__(self)
或{干杯。在
我想我自己已经找到了答案,不完全是一个答案,而是一个可行的解决办法。在
我把所有的信号都换成了新的语法。如果有人想知道,我是通过在worker类中定义一个自定义信号来实现的。所以我的代码看起来像这样
由于某些原因,信号必须在QThread类中;否则,Qt会抱怨“Signal没有属性连接”错误,这非常奇怪。在
相关问题 更多 >
编程相关推荐