Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python QObject::connect:无法对类型为';对象';在皮塞德_Python_Multithreading_Qt_Events - Fatal编程技术网

Python QObject::connect:无法对类型为';对象';在皮塞德

Python QObject::connect:无法对类型为';对象';在皮塞德,python,multithreading,qt,events,Python,Multithreading,Qt,Events,我正在使用PySide(pythonqt绑定) 我有一个类QThread的工作线程,它通过信号/插槽机制更新主GUI线程(更新QTableWidget) 在我的工作线程中,我有以下内容: self.emit(SIGNAL("alterTable(object"), params) 在我的GUI线程中,我有以下内容: self.connect(self.worker, SIGNAL("alterTable(object)"), self.updateMainTable, Qt.AutoConne

我正在使用PySide(pythonqt绑定)

我有一个类QThread的工作线程,它通过信号/插槽机制更新主GUI线程(更新QTableWidget)

在我的工作线程中,我有以下内容:

self.emit(SIGNAL("alterTable(object"), params)
在我的GUI线程中,我有以下内容:

self.connect(self.worker, SIGNAL("alterTable(object)"), self.updateMainTable, Qt.AutoConnection)
由于有几个类似的工作线程正在运行,它们都连接到同一个插槽(self.updateMainTable),因此我应该使用自动连接(因此也使用QueuedConnection)。使用
Qt.DirectConnection
可以工作,但不安全(至少我被告知如此)

但是,当我尝试使用自动连接时,会出现以下错误:

QObject::connect: Cannot queue arguments of type 'object'
(Make sure 'object' is registered using qRegisterMetaType().)
我在谷歌上搜索了很久,试图找到一种在PySide中使用
qRegisterMetaType()
的方法,但毫无效果。我在网上找到的所有资源指向C++语法/文档。
如果有什么不同的话,那么问题的对象在大多数情况下都是一个
dict

我想我自己已经找到了一个答案,不完全是一个答案,而是一个可行的解决方案

我把所有的信号都换成了新的语法。如果有人想知道,我是通过在worker类中定义自定义信号来实现的。所以我的代码看起来像这样

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会抱怨“信号没有属性连接”错误,这很奇怪

我想我自己已经找到了答案,不完全是答案,而是可行的解决方案

我把所有的信号都换成了新的语法。如果有人想知道,我是通过在worker类中定义自定义信号来实现的。所以我的代码看起来像这样

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会抱怨“信号没有属性连接”错误,这很奇怪

非常晚才回答,我很抱歉。声誉不足,无法在您接受的答案中添加评论。我希望这可以帮助新的PySide/Pyside2用户发现您的问题

问题:
QObject::connect:无法对“object”类型的参数进行排队。

解决方案:
self.connect(self.worker,SIGNAL(“alterTable(PyObject)”),self.updateMainTable,Qt.AutoConnection)

问题:
Qt抱怨“信号没有属性连接”错误

解决方案:
connect
属性是在QObject中实现的,因此您必须首先通过
QMainWindow.\uu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


干杯。

我很抱歉,这里的答案来得太晚了。声誉不足,无法在您接受的答案中添加评论。我希望这可以帮助新的PySide/Pyside2用户发现您的问题

问题:
QObject::connect:无法对“object”类型的参数进行排队。

解决方案:
self.connect(self.worker,SIGNAL(“alterTable(PyObject)”),self.updateMainTable,Qt.AutoConnection)

问题:
Qt抱怨“信号没有属性连接”错误

解决方案:
connect
属性是在QObject中实现的,因此您必须首先通过
QMainWindow.\uu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


干杯。

如果您在信号槽中传递对象,则您的设计可能有缺陷。如果您在信号槽中传递对象,则您的设计可能有缺陷。