PyQt报错 QObject::connect: Cannot queue arguments of type ‘QTextCursor‘

跨线程更新QTextEdit
本文介绍了在Qt中从工作线程安全地更新QTextEdit组件的方法。为避免因跨线程操作导致的错误,采用信号与槽机制实现线程间的通信,确保UI更新的安全性。

一、问题描述

当在一个窗口中添加了 QTextEdit/QTextBrowser 控件,并在一个工作者线程中直接调用了 QTextEdit/QTextBrowser 的append函数,这个时候就会出现下面的错误:
QObject::connect: Cannot queue arguments of type ‘QTextCursor’
(Make sure ‘QTextCursor’ is registered using qRegisterMetaType().)

二、问题分析

我们不能通过线程来修改UI,较为安全的修改用户界面的方式是向UI窗口发送信号(signal)

三、解决方案

在工作线程中发射信号,来驱动文本的更新,以下是简要的示例代码

class MyThread(QtCore.QThread):
    # 定义一个信号
    updated_text = QtCore.pyqtSignal(str)

    def run( self ):
        # do some work here
        self.updated_text.emit('job finished')

class Windows(QtGui.QWidget):
    def __init__( self, parent = None ):
        super(Windows, self).__init__(parent)

        self._thread = MyThread(self)
        # 关联工作线程中的信号到此处的槽函数updateText,在updateText中完成ui的更新
        self._thread.updated_text.connect(self.updateText)

        # 点击按钮,开始执行任务
        self._button.clicked.connect(self._thread.start)

    def updateText( self, text ):
        # 这里对UI进行更新
        self.widget_ui.text_browser.append(text)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smart_cat

你的鼓励将是我写作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值