使用PyQt5编写UI程序的时候,发现运行时会经常蹦出这句提示,经检查发现该错误出现程序写入QtextEidt组件时产生的信息。
经搜索后发现当使用QTextEdit,并使用了append方法就会出现该错误提示,原因是
我们不能通过线程来修改UI,较为安全的修改用户界面的方式是向UI窗口发送信号(signal)
,较为简单的方式是使用 Qt threading类。
class MyThread(QtCore.QThread):
updated = QtCore.pyqtSignal(str)
def run( self ):
for i in range(10000):
self.updated.emit(str(i))
class Windows(QtGui.QWidget):
def __init__( self, parent = None ):
super(Windows, self).__init__(parent)
self._thread = MyThread(self)
self._thread.updated.connect(self.updateText)
self._button.clicked.connect(self._thread.start)
def updateText( self, text ):
self.widget.setText(text)
相似问题中QT C++的解决办法:Link
如果不想看到该错误而且也不想通过信号和槽函数修改UI(工程较小,懒得做UI前后端分离),将PyQt5改为Pyside2,后者为QT公司的开源版本,限制相对于PyQt5更少,但是资料的不多,不过官方文档更详尽。
一般情况下,如果报错不是使用QTextEdit的append方法造成的,那么可以在connect
时,在槽函数之后添加参数Qt.DirectConnection
,详细解释见LINK
使用子线程时,向主线程发送包含 qstring 的信号,但是有下面这个提示。而且程序会崩溃。
QObject::connect: Cannot queue arguments of type 'QTextCursor'
(Make sure 'QTextCursor' is registered using qRegisterMetaType().)
firstdoingwork 在子线程中...
2 错误描述
在不同线程之间通过信号/槽来传递自定义数据类型QList的时候,提示错误:
QObject::connect: Cannot queue arguments of type 'QList'
(Make sure 'QList' is registered using qRegist
QObject::connect: Cannot queue arguments of type 'QJsonObject&'
(Make sure 'QJsonObject&' is registered using qRegisterMetaType().)
网上搜了一下相关的解决办法:connect时添加参数Qt::DirectConnection,以保证其不被放入信号队...
QObject::connect: Cannot queue arguments of type 'QList<quint16>'
(Make sure 'QList<quint16>' is registered using qRegisterMetaType().)
QList<quint16>类型没有被注册,只需要注册一下就解决了。
解决方法:
在报错信息中找到报错的哪一行,在之前加上下面
I have a small problem concerning two threads and signals/slots connected between them.
My connect looks like this.
QObject::connect: Cannot queue arguments of type 'QList<quint16>'
(Make sure 'QList<quint16>' is registered using qRegisterMetaType().)
这个是由于,在主线程中开启另一个线程,这两个线程之间需要进行信息的交互。但是QList<quint16>l类型没有被注册,只要你注册一下就解决了。
解决方法:
转自CSDN:https://blog.csdn.net/qq575787460/article/details/8469240
例如以C++标准库中string做参数,则会出现:
QObject::connect: Cannot queue arguments of type 'string'
(Make sure 'string' is registed using qRegisterM...
QObject::connect: Cannot queue arguments of type 'QQmlChangeSet' (Make sure'QQmlChangeSet' isregistered using qRegisterMetaType()
二、问题发生的前因
我在 boost 回调函数中使用了 beginInsertRows 这类更新 Tablevi...