QTextEdit 控件,并在子个线程中直接调用了 QTextEdit 的append函数出错

当我在一个窗口中添加了 QTextEdit 控件,并在生成的新的子线程中直接调用了 QTextEdit 的append函数,这个时候就会出现下面的错误:

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

(Make sure 'QTextCursor' is registered using qRegisterMetaType().)


2. 解决方法

经过进一步检查发现原因是Qt中带参数的信号如果在线程中被发送,那么必须放入队列里面,由于QTextEdit是Qt库自带的,改起来不方便,所以我采用了一个简单的方法来解决这个问题,原理是在窗口类中定义信号和槽,并实现另一个接口函数,这个接口函数由线程调用,在接口函数中emit一个信号,示例代码如下:

1)在子线程中声明信号和函数
signals:
    void AppendText(const QString &text);

在主线程(UI线程)中声明槽和函数

private slots:
    void SlotAppendText(const QString &text);
2)声明接口函数
public:
    void Append(const QString &text);
3)在类构造函数中连接信号与槽
connect(receiveInfo, SIGNAL(AppendText(QString)), this, SLOT(SlotAppendText(QString)));
4)实现接口函数
void ReceiveTh::Append(const QString &text)

{
    emit AppendText(text);
}

5)实现槽函数
void Widget:: SlotAppendText( const QString & text)
{
    ui->textEdit->append(text);
    //ui->textEdit->moveCursor(QTextCursor::End);
}

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值