添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

使用PyQt5编写UI程序的时候,发现运行时会经常蹦出这句提示,经检查发现该错误出现程序写入QtextEidt组件时产生的信息。

经搜索后发现当使用QTextEdit,并使用了append方法就会出现该错误提示,原因是 我们不能通过线程来修改UI,较为安全的修改用户界面的方式是向UI窗口发送信号(signal) ,较为简单的方式是使用 Qt threading类。

class MyThread(QtCore.QThread):
    updated = QtCore.pyqtSignal(str)
    def run( self ):
        # do some functionality
        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)
        # create a line edit and a button
        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&amp;' (Make sure 'QJsonObject&amp;' 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...