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

痛定思痛。 2023-05-31 03:05 7阅读 0赞

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

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

  1. class MyThread(QtCore.QThread):
  2. updated = QtCore.pyqtSignal(str)
  3. def run( self ):
  4. # do some functionality
  5. for i in range(10000):
  6. self.updated.emit(str(i))
  7. class Windows(QtGui.QWidget):
  8. def __init__( self, parent = None ):
  9. super(Windows, self).__init__(parent)
  10. self._thread = MyThread(self)
  11. self._thread.updated.connect(self.updateText)
  12. # create a line edit and a button
  13. self._button.clicked.connect(self._thread.start)
  14. def updateText( self, text ):
  15. self.widget.setText(text)

相似问题中QT C++的解决办法:Link

如果不想看到该错误而且也不想通过信号和槽函数修改UI(工程较小,懒得做UI前后端分离),将PyQt5改为Pyside2,后者为QT公司的开源版本,限制相对于PyQt5更少,但是资料的不多,不过官方文档更详尽。

一般情况下,如果报错不是使用QTextEdit的append方法造成的,那么可以在connect时,在槽函数之后添加参数Qt.DirectConnection,详细解释见LINK

发表评论

表情:
评论列表 (有 0 条评论,7人围观)

还没有评论,来说两句吧...

相关阅读