欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

QObject::connect: Cannot queue arguments of type 'QTextCursor'

程序员文章站 2022-05-11 08:11:45
...

使用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

相关标签: pyqt